چند زبانه کردن پروژه های Elixir

با درود خدمت شما .

یک پروزه به صورت DDD داریم. این پروژه در داخل خودش ۱۲ زیر سیستم مستقل دارد که هر کدام باید در خودشان فعلن سه زبان داشته باشند.

  1. فارسی
  2. انگلیسی
  3. آلمانی

من به gettext نگاهی کردم در پلاگینی که در الکسیر ساخته شده است ولی فکر می کنم جوابگوی من نباشه بیشتر آموزش های مربوط به اون هم فریم ورک وبشو هدف قرار داده.

به هر صورت می خواستم ببنیم کار زیر درست می باشد یا خیر بدون gettext

من می یام چند فایل text می سازم مثلا en.text, fa.text حالا می یام در هر خط می نویسم مثلا

NAME_OF_TEST=the name of text

حالا مثلا اگر در کدم NAME_OF_TEST بود در این فایل بگرده و ترجمشو بیاره .

به نظر شما این راه حل مشکل سرعت نداره ؟


راه حل دیگه اینکه تمام فایل های مربوط به زبان رو به صورت متغییر در سیستم عامل ذخیره کنم

export TEST_I=test 1

ممکنه کل ترجمه به ۲۰ هزار خط برسه و حالا می تونم این رو از خود مثلا لینوکس بخونم .

شما کدوم راه حل رو پیشنهاد می دهید ؟ یا راه حل بهتر

در اولین گزینه هر بخش تبدیل به یک فایل مثلا ۲۰۰ تا ۱۰۰ خطی می شه و هر هر صفحه فقط فایل مربوط به اون بخش خوانده می شه و بر اساس زبان تفکیک می شه مثلا فقط فایل های مربوط به زبان x بیار


یک راه حل دیگه اینکه من بیام این مورد رو بر روی ردیس یا موارد دیگه روی رم بر اساس زبانی که کاربر می فرسته یک بار در شروع پروژه ذخیره کنم و هر سری ازش بخونم حداکثر بخواد در بدترین شرایط یک گیگ رم رو اشغال کنه !!؟

تشکر

DDD مثل همیشه خوب اومدی :yum:
خارج از شوخی یکمی بیشتر در مورد پروژه توضیح بده، مثلا چرا لازمه از فایل txt استفاده کنی، یا اینکه این پروژه اصلا در چه دسته بندی هست؟
و چرا روش های استاندارد internationalization جواب نمیده؟

2 Likes

به نظرم استفاده از gettext مشکلی نداره برای همین کار ساخته شده . حتما نباید تمام داده از ram خونده بشه … فقط داده هایی که در performance و ارتقا سیستم اختلال ایجاد میکنه را برخی مواقع میشه در ram ذخیره کرد.
اول منبع یک مشکل و اختلال تشخیص بده بعد فکر حل مشکل باش نه برعکس

“Premature optimization is the root of all evil”
Donald Knuth

2 Likes

درود خدمت دو بزرگوار هر دو شما درست می فرمایید من یک تست در ترمینال در مورد gettext زدم جواب داد حالا در روز های آینده تست می کنم فکر کنم همین مشکلمو حل بکنه و بتونم با gettext این کارو انجام بدم.

یک کدی پیدا کردم وسطای داکیومنتش

Gettext.put_locale(MyApp.Gettext, "pt_BR")

که این امکان می ده هر gettext هر هر پروژه رو بیام در موقع فراخوانی بگم که مثلا تو اون لحظه انگلیسی باشه تو اون لحظه مثلا فارسی باش .

1 Like