بسم الله الرحمن الرحيم
في السابق قد شرحنا طريقة برمجة تطبيق اندرويد متعدد اللغات ولكن التحكم باللغات عن طريق لغة الهاتف التي يستخدمها الجوال نفسه, اي التغيير بين اللغات يكون عن طريق ضبط الهاتف, ولكن اليوم طريقة التغيير بين اللغات عن طريق النقر على زر او نص او صورة أو أي شيء تريد .. المهم داخل دالة onClick
في البداية قبل الدخول لهذا الموضوع .. نرجوا قراءة الموضوع التالي :
تستفيد من الدرس السابق كيفية إضافة أكثر من لغة في تطبيق .. بعد قرائته تفضل هنا لتكمل المطلوب ..
أولاً : كما ذكرنا في الدرس السابق سوف يكون لديناً أكثر من مجلد values حسب اللغات التي تريد .. ولكن في هذا المثال سوف أستخدم فقط لغتين .. العربية والانجليزية أي :
- values / للغة الافتراضية الانجليزية
- values-ar / من أجل اللغات العربية
وبالتالي سوف يكون لدينا ملف strings مكرر مرتين .. استخدم النصوص التي تريد ولكن تابع معي لنكمل هذا التطبيق .. وأنت بعدها تغيير النصوص التي تريد ..
كذلك سوف يكون لدينا 2 اكتفتي (Activity) و 2 لياوت (Layout) .. الأولى هي الرئيسية وفيها تختار اللغة وزر الدخول والأخرى هي لعرض عبارة مرحباً .. بكلتا اللغتين ..
strings.xml
<resources> <string name="app_name">Andrody.com</string> <string name="choose">Choose the language :</string> <string name="btn_en">English</string> <string name="btn_ar">Arabic</string> <string name="enter">Enter</string> <string name="welcome">welcome</string> </resources>
ar\strings.xml
<resources> <string name="app_name">اندرودي عربي</string> <string name="choose">اختر اللغة :</string> <string name="btn_en">الانجليزية</string> <string name="btn_ar">العربية</string> <string name="enter">دخول</string> <string name="welcome">مرحبا</string> </resources>
تمام الآن انتهينا من ملفات strings و الآن نأتي إلى الليوت Layout :
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/choose" android:layout_gravity="center" android:layout_margin="30dp" android:id="@+id/textView" /> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_ar" android:layout_weight="0.5" android:id="@+id/btn_ar" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_en" android:layout_weight="0.5" android:id="@+id/btn_en" /> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/enter" android:id="@+id/but_enter" android:layout_margin="50dp" android:layout_gravity="center_horizontal" /> </LinearLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/welcome" android:textSize="40dp" android:layout_gravity="center_horizontal" /> </LinearLayout>
والآن إلى الملفات البرمجية .java ..
MainActivity.java
package com.andrody.first_app; 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.view.View; import android.widget.Button; import java.util.Locale; public class MainActivity extends Activity { private Button andrody_en, andrody_ar, andrody_enter; private Locale Language; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); andrody_enter = (Button) findViewById(R.id.but_enter); this.andrody_en = (Button) findViewById(R.id.btn_en); this.andrody_ar = (Button) findViewById(R.id.btn_ar); andrody_enter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent uo = new Intent(MainActivity.this,Main.class); startActivity(uo); } }); andrody_en.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setLocale("en"); } }); andrody_ar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setLocale("ar"); } }); } public void setLocale(String lang) { Language = new Locale(lang); Resources res = getResources(); DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); conf.locale = Language; res.updateConfiguration(conf, dm); Intent refresh = new Intent(this, MainActivity.class); startActivity(refresh); finish(); } }
Main.java
package com.andrody.first_app; import android.app.Activity; import android.os.Bundle; /** * Created by Abboudi_Aliwi on 27/02/2015. */ public class Main extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}
هكذا انتهينا, ولكن في تصوري انه ليس هناك الجديد, إلا في MainActivity, وقرائته جداً سهلة عليكم بعد وصولكم معي لهذا المستوى.
ولكن سوف أحاول أن أسهل لكم الأمر قدر الإمكان :
- في البداية اسم الحزمة في الملفات السابقة هو com.andrody.first_app غيره كما لديك في مشروعك.
- وضعنا عدة أزرار .. زر للغة الإنجليزية وزر للغة العربية وزر الدخول .. للدخول إلى صفحة جديدة وفيها عبارة مرحباً.
- تعاملنا مع جميع النصوص في المشروع في قيم سترنج strings, لكي تستطيع استخدامها لعدة لغات.
- في ملف الجافا عرفنا الأزرار التي لدينا في متغيرات, وعرفنا متغير من نوع Locale.
- برمجنا زر الدخول واعطينا له الأمر الانتقال إلى الاكتفتي الاخر main فقط هذه وظيفته بواسطة Intent.
- برمجنا زر اللغة الانجليزية واعطينا له الأمر .. تنفيذ الدالة setLocale الموجودة لدينا في أسفل الاكتفتي مع أخذ سترنج بعنوان en.
- برمجنا زر اللغة العربية واعطينا له الأمر .. تنفيذ الدالة setLocale مع أخذ القيمة ar.
الى الآن لا يوجد الجديد سوا الدالة setLocale الموجودة في اسفل الملف MainActivity.
فيها استخدمنا المتغير Language ( متغير تستطيع تغيره ) وهو معرف في الأعلى من نوع Locale .. الدالة واضحة لاستخدام Locale الموجود داخل كلاسات اندرويد .. وفيها قلنا له حدث لنا الصفحة باللغة المختارة .. و كذلك قلنا له نفذ الأمر finish لإغلاق هذه الصفحة .. أي عندما نكون في اللغة الانجليزية وضغطنا على اللغة العربية .. حدث لنا الصفحة وأتي بها لنا باللغة العربية ثم أغلق هذه الصفحة التي هي باللغة الانجليزية ..
أرجوا أن أكون قد وضحت المطلوب لكم .. وهذه معاينة سريعة بالصور لعملنا لهذا اليوم :
اي اقتراح أو استفسار يمكنك التعليق على التدوينة .. كما يسعدنا مشاركتكم للموضوع
وانتظرونا بكل جديد ومفيد .. والسلام عليكم 🙂
لتحميل التدوينة في كتاب إلكتروني Download pdf : https://andrody.com/?attachment_id=326
ظهر خطأ عند الدخول الى الأكتيفيتي الجديدة و الحل باضافة activity
الى ملف manifest
يبدو أنك نسيتها في الشرح و شكرا
مشكور أخي على توضيحك ..
ولكنها معلومة أساسية ويجب عند اضافة اي اكتفتي اضافتها داخل الmanifest
شكرا لكم ولكن للاستفاده ممكن طريقة اضافة activity لهذا المثال حتى تتضح لنا الطريقة وشكرا
السلام عليكم،،
كيف اخلي toast تنعرض على حسب اللغة اللي اختارها المستخدم؟؟
شكرا لشروحاتك استفدنا منها..
الطريقة ما اشتغلت عندي اخي ..
معقول لانو Navigation Drawer Activity ؟