بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

آموزش قدم به قدم  ساخت نرم افزار چند زبانه (با بهتر است بگوییم چند زبانه کردن نرم افزار)

مدیریت گفتگو
hamcalas 11 سال پیش
آخرین تغییر: 9 سال پیش

آموزش قدم به قدم ساخت نرم افزار چند زبانه

بعد اینکه یک نرم افزار چند زبانه منتشر کردم دوستان سوال داشتند  چطور میشه نرم افزار چند زبانه ساخت در مطالب سایت هست اما در این مقاله جزئی تر به این موضوع می پردازیم :

1- روش نوشتن استرینگ ریسورس برای زبانهای مختلف

2- روش استفاده از استرینگ ریسورس ها

3- روش تنظیم زبان به زبانی دیگر

4-روش تنظیم ui اختصاصی برای هر زبان

نظرات

پاسخ‌ها 6

hamcalas 11 سال پیش

قدم اول ساخت استرینگ ریسورس ها

در پروژه به پوشه ی    res   سربزنید (:    یک پوشه با نام  values   مشاهده می کنید پوشه ی values را باز کنید و روی strings.xml  کلیک کنید تا باز شود از خط اول یکی کپی بگیرید  و آن را به شکل زیر تغییر دهید


  <string name="ok">ok</string>

در اینجا استرینگ ها را نامگذاری می کنیم  کد بالا از عناصر زیر تشکیل شده

     <string name="ok">//نام استرینگ
ok //متنی که قرا است با صدا کردن این استرینگ دیده شود
</string>

همه ی کار همین است ! هر چند جمله یا کلمه در نرم افزار دارید این کار را برایش انجام دهید .(به انگلیسی )

وقتی تمام جملات را به شکل بالا نوشتید برای ترجمه به چند زبان دیگر باید از پوشه ی values  کپی بگیرید و نام آن را به شکل زیر تغییر بدهید و محتویات فایل strings.xml   را به زبان فوق ترجمه کنید مثلا برای فارسی :

      <string name="ok"> قبول</string>

برای زبان فارسی  values-fa   و برای آلمانی values-de   و نام پوشه ی سایر زبانها را در ادامه خواهید دید پس تا اینجا باید پوشه هایی با کد زبان مورد نظر داشته باشیم :

کد زبانها و نام پوشه در اندروید تا اندروید 4

Language Locale values/strings.xml
German de values-de/strings.xml
Chinese zh values-zh/strings.xml
Czech cs values-cs/strings.xml
Dutch nl values-nl/strings.xml
French fr values-fr/strings.xml
Italian it values-it/strings.xml
Japanese ja values-ja/strings.xml
Korean ko values-ko/strings.xml
Polish pl values-pl/strings.xml
Russian ru values-ru/strings.xml
Spanish es values-es/strings.xml
Arabic ar values-ar/strings.xml
Bulgarian bg values-bg/strings.xml
Catalan ca values-ca/strings.xml
Croatian hr values-hr/strings.xml
Danish da values-da/strings.xml
Finnish fi values-fi/strings.xml
Greek el values-el/strings.xml
persian fa values-fa/strings.xml
Hindi hi values-hi/strings.xml
Hungarian hu values-hu/strings.xml
Indonesian in values-in/strings.xml
Latvian lv values-lv/strings.xml
Lithuanian lt values-lt/strings.xml
Norwegian nb values-nb/strings.xml
Portuguese pt values-pt/strings.xml
Romanian ro values-ro/strings.xml
Serbian sr values-sr/strings.xml
Slovak sk values-sk/strings.xml
Slovenian sl values-sl/strings.xml
Swedish sv values-sv/strings.xml
Tagalog tl values-tl/strings.xml
Thai th values-th/strings.xml
Turkish tr values-tr/strings.xml
Ukrainian uk values-uk/strings.xml
Vietnamese vi values-vi/strings.xml

نظرات

hamcalas 11 سال پیش

قدم سوم  استفاده از استرینگ ریسورس ها

در XML   برای نوشتن کلمه مثلا ok هر گز ننویسید

  //اشتباه 
<Button
android:background="@drawable/button_matrial"
android:text="ok"/>


بلکه آدرس استرینگی که به ok اشاره می کند را بدهید

        //صحیح 
<Button
android:background="@drawable/button_matrial"
android:text="@string/ok"/>

و برای ست کردن متن در داخل class ها 

هرگز ننویسیم

    btnOk.setText("ok");

بلکه بنویسیم :

     btnOk.setText(getResources().getString(R.string.ok));

 

 

نظرات

hamcalas 11 سال پیش

تغییر زبان برنامه بصورت دستی :

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

اما می توانیم تغییر زبان را دستی نیز  انجام بدهیم مثلا در مواقعی که گوشی زبان فارسی ندارد اما استفاده کننده فارسی زبان است .

برای اینکار کافی است متد زیر را در کلاسی که از اپلیکیشن اکستند شده بکار ببریم (کلاس G معروف استاد)

     public static void setLocale(String lang) {
Locale myLocale;
myLocale = new Locale(lang);
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);

}

و برای صدا زدن  :

           // در اکتیویتی  انتخاب زبان زبان انتخابی کاربر را در پرفیینس ها ذخیره کنید سپس در کلا جی به شکل زیر به آن اشاره کنید
String language =preferences.getString("Mlanguage", systemLanguage);
setLocale(language);


شاد باشید (:

نظرات

Mr7 11 سال پیش
cooooooooolllllll
Farnad 11 سال پیش
دست شما درد نکنه عالی بود
cyberchief 10 سال پیش
در پرفرنسس فونت ها رو چجوری ذخیره کنیم؟ مثلا برا فارسی ، FA رو ذخیره کنیم؟
hamcalas 10 سال پیش
نام فونت انتخابی کاربر را که string هست ذخیره کنید بعد شرط بگذارید اگر نام فونت fa بود از فلان typeface استفاده کن و گرنه از یکی دیگه
Mir Unknown 9 سال پیش
من با انتخاب کاربر زبان رو تغییر میدم امادو مشکل دارم یکی این که برنامه رو باید ببنده باز کنه تا زبان تغییر کنه دوم این که فقط استرینگ ها تغییر میکنه لایوت ها تغییر نمیکنن من میخوام وقتی فارسی کرد لایه ها مربوط به زبان فارسی بیان با این که زبان گوشی انگلیسیه
Dolphin Tech 9 سال پیش
عالی بود ، فقط من تیکه ی آخرش رو که دستی setLocal(language) میکنی رو متوجه نشدم !
Dolphin Tech 9 سال پیش
اگه اشتباه نکنم به سادگی میشه زبان رو با عبارت "fa" یا "en" ویا هر زبان دیگه ای که میخواییم به صورت string به مند ()setLocale پاس بدیم و زبان app رو تغییر بدیم .
Mr7 10 سال پیش

سلام برای فونت هم این چنین قابلیتی وجود داره . همین طور سرعتی و روان که بر اساس زبان فونت رو ست کنه؟

ممنون

نظرات

hamcalas 10 سال پیش
برای فونت ها اطلاع ندارم اما برای ui ها امکان پذیر است روشش را در زیر می نویسم
hamcalas 10 سال پیش

چند زبانه بودن نر افزار می توانند در زبانهای راست به چپ و چپ به راست باعث نامناسب بودن چینش ها شود .

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

برای این کار برای هر زبان در زیر پوشه res یک فلودر با کد زبان مورد نظر می سازیم و xml را درآن قرار می دهیم.

مثلا برای فارسی

layout-fa

برای عربی

layout-ar

وlayout هم برای مواردی که تعیین نمی کنید .

نکته فایل xml موجود در چوشه ها از نظر نام و id موارد داخلش یکسان است و تنها چینش و رنگ بندی و.... فرق خواهد کرد .

 

برای تغییر فونت متاسب با زبان می توان بطور زیر شرط گذاشت که اگر زبان فارسی بود از فلان فونت و اگر انگلیسی بود از فلان فونت استفاده کن.البته شاید راه بهتری وجود داشته باشد .

نظرات

Mr7 10 سال پیش
COOOOOOOOOOOOOOOOOOOOOOOOOOOOLLLL
hamcalas 9 سال پیش

آپدیت

از API Level 17   به بعد (Android 4.2 و بالاتر )  اندروید چینش راست به چپ را بطور خودکار پشتیبانی می کند ، که خیلی خوب است و لازم نمی شود برای زبان های راست به چپ layout های جداگانه ای طراحی کنیم  و خودش چینش ها را برعکس می کند ،هر چند اندروید این قابلیت را دارد اما ممکن است بعضی گوشی ها زبان فارسی را نداشته باشند و چینش ها نا منظم باشند پس برای اینکه با به هم ریختگی مواجه نشویم به روش زیر عمل می کنیم

در AndroidManifest.xml  در تگ application  خط زیر  را قرار می دهیم    

 android:supportsRtl="true"

می شود :

 <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

سپس کدهای زیر را در activity قرار می دهیم

 
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void forceRTLIfSupported()
{
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    }
}

و در onCreate()   به شکل زیر صداش می کنیم

 
forceRTLIfSupported()

این قضیه برای زمانی است که زبان برنامه فارسی است اما زبان گوشی فارسی نیست

 

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .