چند زبانه کردن برنامه

Razieh Shahraki
توسط Razieh Shahraki در آموزش های اندروید,
در این آموزش میخواهیم برنامه ای ایجاد کنیم که قابلیت تعویض بین چند زبان را داشته باشد. این آموزش ابتدایی می باشد و برای کمک به دوستانی که میخواهند این قابلیت را به برنامه های خود اضافه کنند می باشد. برای شروع پروژه جدیدی ایجاد کنید و کد زیر را در آن قرار دهید. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="@string/hello_world" /> android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_marginTop="43dp" android:text="@string/btn1" /> android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/button1" android:layout_centerHorizontal="true" android:layout_marginTop="49dp" android:text="@string/btn2" /> android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="36dp" > android:id="@+id/radio0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="فارسی" /> android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="English" /> android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="French" />   در کد فوق ما یک تکست ویو، دو دکمه و سه رادیو باتن برای سه زبان فارسی، انگلیسی و فرانسه داریم. برای هر زبانی که میخواهید ایجاد کنید یک پوشه به سبک زیر در پوشه res ایجاد کنید. [align=right]همانطور که در جدول بالا می بینید باید پوشه مربوط به زبان مورد نظر را ساخته و در آن فایل string.xml را قرار دهیم و هنگام تشخیص زبان از locale استفاده کنیم.[/align] [align=right]پوشه values پوشه پیش فرض پروژه می باشد که ما برای زبان انگلیسی در نظر گرفته ایم و کد زیر را در فایل string قرار داده ایم.[/align] <?xml version="1.0" encoding="utf-8"?>     MultiLanguage     Settings     Hello world!     Button 1     Button 2     [align=right]پوشه دیگری به اسم values-ar برای زبان عربی ساخته و کد زیر را در فایل string آن قرار می دهیم.(بجای کلمات عربی فارسی نوشتم)[/align] [align=right][shcode=xml]<?xml version="1.0" encoding="utf-8"?>     چند زبانه     تنظیمات     سلام جهان     دکمه 1     دکمه 2 [/shcode][/align] [align=right]پوشه دیگری به اسم values-fr برای زبان فرانسه ساخته و در فایل string آن کد زیر را قرار می دهیم.[/align] <?xml version="1.0" encoding="utf-8"?>     multilingue     Paramètres     Bonjour tout le monde!     bouton 1     bouton 2   خب کار ما با زبان ها تمام شد و به فایل جاوا می رویم.[/align]
در فایل جاوا کد زیر را قرار می دهیم. package com.example.multilanguage; import java.util.Locale; import android.app.Activity; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.util.DisplayMetrics; import android.widget.RadioButton; import android.widget.RadioGroup; public class MainActivity extends Activity { RadioGroup rg; RadioButton rb0, rb1, rb2; String lang; Locale myLocale; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rg = (RadioGroup) findViewById(R.id.radioGroup1); rb0 = (RadioButton) findViewById(R.id.radio0); rb1 = (RadioButton) findViewById(R.id.radio1); rb2 = (RadioButton) findViewById(R.id.radio2); if (rb0.isChecked()) { setLocale("ar"); } else if (rb1.isChecked()) { setLocale("en"); } else if (rb2.isChecked()) { setLocale("fr"); } } public void setLocale(String lang) { myLocale = new Locale(lang); Resources res = getResources(); DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); conf.locale = myLocale; res.updateConfiguration(conf, dm); Intent refresh = new Intent(this, MainActivity.class); refresh.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(refresh); } }   کار اصلی در کد فوق با رادیو باتن هاست. در هر رادیو باتن با توجه به متنی که نمایش می دهند از locale استفاده می کنیم و آن را به تابع setLocale ارجاع داده تا تنظیمات جدید را دریافت کرده و اکتیویتی را ریفرش کند. خروجی برنامه به صورت زیر می باشد  
  • 0 پاسخ