آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

hamcalas  8 سال پیش  6 سال پیش
+54 0

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

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

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

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

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

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

 برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال 
hamcalas  8 سال پیش
+7 0

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

در پروژه به پوشه ی    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  8 سال پیش
+4 0

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

در 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  8 سال پیش
+7 0

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

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

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

برای اینکار کافی است متد زیر را در کلاسی که از اپلیکیشن اکستند شده بکار ببریم (کلاس 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);


شاد باشید (:

0 0
cooooooooolllllll (8 سال پیش)
0 0
دست شما درد نکنه عالی بود (8 سال پیش)
0 0
در پرفرنسس فونت ها رو چجوری ذخیره کنیم؟ مثلا برا فارسی ، FA رو ذخیره کنیم؟ (8 سال پیش)
0 0
نام فونت انتخابی کاربر را که string هست ذخیره کنید بعد شرط بگذارید اگر نام فونت fa بود از فلان typeface استفاده کن و گرنه از یکی دیگه (8 سال پیش)
0 0
من با انتخاب کاربر زبان رو تغییر میدم امادو مشکل دارم یکی این که برنامه رو باید ببنده باز کنه تا زبان تغییر کنه دوم این که فقط استرینگ ها تغییر میکنه لایوت ها تغییر نمیکنن من میخوام وقتی فارسی کرد لایه ها مربوط به زبان فارسی بیان با این که زبان گوشی انگلیسیه (6 سال پیش)
0 0
عالی بود ، فقط من تیکه ی آخرش رو که دستی setLocal(language) میکنی رو متوجه نشدم ! (6 سال پیش)
0 0
اگه اشتباه نکنم به سادگی میشه زبان رو با عبارت "fa" یا "en" ویا هر زبان دیگه ای که میخواییم به صورت string به مند ()setLocale پاس بدیم و زبان app رو تغییر بدیم . (6 سال پیش)
پاسخ به سوال 
Mr7  8 سال پیش
+1 0

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

ممنون

+1 0
برای فونت ها اطلاع ندارم اما برای ui ها امکان پذیر است روشش را در زیر می نویسم (8 سال پیش)
پاسخ به سوال 
hamcalas  8 سال پیش
+4 0

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

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

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

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

layout-fa

برای عربی

layout-ar

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

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

 

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

0 0
COOOOOOOOOOOOOOOOOOOOOOOOOOOOLLLL (8 سال پیش)
پاسخ به سوال 
hamcalas  7 سال پیش
+3 0

آپدیت

از 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()

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

 


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