ورود

View Full Version : چند زبانه کردن قسمتهای غیراستاندارد برنامه



SZsXsZS
شنبه 24 بهمن 1394, 16:26 عصر
میدونید که روش استاندارد چند زبانه کردن در اندروید با استفاده از فایل strings.xml است.
مثلا وقتی زبان انگلیسی باشه رشته های داخل برنامه از فایل strings.xml واقع در دایرکتوری res/values خونده میشن، ولی وقتی زبان فارسی باشه رشته ها از فایل strings.xml واقع در دایرکتوری res/values-fa خونده میشن.
روش درج این رشته ها در برنامه رو هم که میدونید به این شکل هست که از ‎@string/string_name استفاده میکنیم و در کد جاوا هم میتونیم از getResources().getString(R.string.string_name)‎ استفاده کنیم.

اما وقتی رشته های ما در جای دیگری باشن چطور؟

مثلا برنامهء من اینترفیس تحت مرورگر داره، یعنی از طریق مرورگر وب روی PC با برنامهء روی گوشی ارتباط برقرار میکنیم. بنابراین برنامه یکسری کد HTML رو به مرورگر ارسال میکنه.

حالا سوال اینه که بنظرتون چه روشی برای چند زبانه کردن این اینترفیس های HTML مناسبه؟
چون ما که نمیتونیم در این صفحات HTML (که من توی پوشهء raw ذخیره کردمشون) از ‎@string/string_name استفاده کنیم.
البته من تست کردم یک پوشهء raw-fa هم اگر ایجاد کنیم، اونوقت وقتی زبان فارسی هست بطور خودکار فایلهای HTML موجود در این پوشه بجای اونایی که توی raw هستن خونده میشن؛ دقیقا مثل values و values-fa. ولی من نمیخوام از کل هر فایل HTML دو نسخه یکی به زبان انگلیسی و دیگری به زبان فارسی داشته باشم، چون این روش افزونگی بیش از حد داره بنظرم و تغییرات و نگهداری برنامه رو مشکل میکنه.

یه فکری که الان بنظرم میرسه اینه که فقط رشته ها رو بصورت متغییرهای جاوااسکریپت در فایلهای js که توی پوشهء raw و raw-fa میذارم ذخیره کنم و بعد در هر فایل HTML، این فایل js مربوط به رشته ها رو لود میکنم و توسط جاوااسکریپت رشته ها رو هرکدام در جای خودشون در سورس HTML قرار میدم.
شاید تنها اشکالی که بشه به این روش گرفته وابسته بودنش به جاوااسکریپت هست، اما بنظرم این امروزه دیگه مسئله ای نیست و ساپورت جاوااسکریپت امروزه جزو امکانات پایه برای خیلی سایتها و نرم افزارها محسوب میشه و دیگه گذشت دورانی که بگیم باید برنامه بدون جاوااسکریپت هم قابل استفاده باشه.

Nevercom
شنبه 24 بهمن 1394, 18:04 عصر
از اندروید که بگذریم، روش اصولی برای چند زبانه کردن وب سایت ها مشابه چیزی هست که فرمودید.
مثلاً فریم وورک هایی مثل AngularJS که قابلیت Data Binding دارن، برای چند زبانه کردن وب اپ های تحت این فریم وورک، روش استاندارد این هست که متغیرهای همنام برای تمام زبان ها وجود داشته باشه که برای هر زبان مقدار مختص به اون زبان رو داره.

الگویی که انتخاب کردید کاملاً درست هست و البته قابل ذکره که دنیای وب امروزی بدون جاوا اسکریپت قابل تصور نیست

SZsXsZS
شنبه 24 بهمن 1394, 20:03 عصر
البته رشته ها رو میشه توی خود برنامهء اندروید هم با کدنویسی جاوا جایگزین کرد، ولی بنظرم دنگ و فنگ و کد بیشتری داره و ضمنا بخاطر پردازشی که روی دیوایس تحمیل میکنه بنظر چندان جالب نمیاد. این کار رو بندازیم سمت کلاینت و روی PC بنظرم بد نیست یه سهمی از پردازش هم بره اون طرف که سیستم معمولا قدرت بیشتری هم داره.

البته برای کاهش بار پردازشی روی دیوایس میتونیم از کش کردن هم استفاده کنیم که هر دفه نیاز نباشه توکن ها سرچ و جایگزین بشن، ولی خب اینم باز میشه کد و کار بیشتر برای برنامه نویس و پیچیدگی بیشتر برنامه.

بعد از سالها تحقیق و مطالعه و بررسی زبانهای مختلف و نوشتن بعضی کدها و برنامه ها، الان به این دیدگاه رسیدم که برنامه رو باید از ساده ترین و سریع ترین روش از نظر برنامه نویسی نوشت. بهینه سازی هم فقط بهینه سازیهای ضروری یا واقعا درشت.

دیگه الان واسم مهم نیست چه زبانی کدوم سمتی. توی نوشتن یه برنامه نگاه میکنم الان کدوم زبان کدوم ابزار کدوم روش راه دست تر هست با کد کمتر زحمت کمتر سریعتر برنامه رو میشه نوشت. بخصوص آدم وقتی به چند زبان و حیطه وارد باشه اینطور دیگه خوب راه میفته و حال هم میده. راحت میتونی چند زبان و حیطه رو بصورت ترکیبی با هم همزمان استفاده کنی.

حالا یه برنامه بعد از اینکه به بلوغ و تکامل رسید میشه روی بهینه سازیش هم کار بیشتری کرد چون اون موقع خیلی راحتتر و مناسب تره معمولا و آدم خوب بهش مسلط شده اساس و پایه رو کاملا طراحی و تست کردی و خیالت راحته که تمام اصل موضوع هست و قابل استفاده است.