2.33/5 (3)

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

همانطور که که میدونید روش تغییر زبان در اپلیکیشن های اندرویدی فرق کرده و روش زیر که قبلا از آن استفاده میشده و در بیشتر سایتها ها هم این روش رو آموزش دادند از طرف گوگل منسوخ شده :

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

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

  • تعریف کلاس ContextWrapper :

برای اینکه بتونیم به راحتی در هر اکتیویتی از این کلاس استفاده کنیم این کلاس رو با یک متد استاتیک wrap تعریف میکنیم :

خط چهارم کد بالا یک مقدار از sharedPreferences  میخونه که این مقدار زبان تعیین شده توسط ما رو مشخص میکنه . “en”  برای زبان انگلیسی و “fa” برای زبان فارسی .پارامتر دوم متد ()sharedPreferences.getString رو برابر “en” گذاشتم که ینی مقدار پیشفرض در صورتی که از قبل چیزی برای sharedPreferences  تعیین نکرده باشیم انگلیسی قرار داده بشه . شما برای تعیین زبان دلخواه میتونید از یک ListPreferences  استفاده کنید یا هر روش دیگه ای و مقدار “lang_prefs_name” رو در sharedPreferences برابر کد زبان دلخواه خود قرار دهید .

  • استفاده کلاس ContextWrapper :

تا اینجا ما کلاس مورد نظر خودمونو برای تغییر زبان نوشتیم . حالا چطوری باید ازش استفاده کنیم و چطوری زبان برنامه رو عوض کنیم ؟

برای استفاده از این کلاس باید متد

مربوط به هر اکتیویتی رو override کنیم :

این متد رو باید برای هر کدوم از activity هایی که میخواهیم زبانش تغییر پیدا کنه override کنیم . در واقع باید در تمام اکتیویتی ها این کار رو انجام بدیم .

نکته : در خود اندروید هم کلاس ContextWrapper وجود داره و هنگام استفاده از این کلاس دقت کنید که کلاس ContextWrapper مربوط به پکیج خودتونو استفاده کنید یا اینکه میتونید اسم این کلاس رو چیز دیگه ای هم بذارید.

تا اینجای کار 90 درصد کار انجام شده تنها کاری که مونده اینه که بعد از اینکه مقدار “lang_prefs_name” رو در sharedPreferences  تغییر دادیم در واقع زبان رو عوض کردیم باید برنامه رو ریستارت کنیم تا تغییر زبان در همه جای برنامه اعمال بشه:

برای ریستارت کردن برنامه از روشهای مختلفی میشه استفاده کرد که ساده ترینش اینه :

به این مطلب چه امتیازی میدهید ؟

اشتراک
باخبر شدن از
guest

3 نظرات
قدیمی ترین
جدیدترین بیشترین امتیاز
Inline Feedbacks
نمایش همه دیدگاه ها
unk

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

هیرش

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