جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

اطلاعات شخصی شما برای پردازش سفارش شما استفاده می‌شود، و پشتیبانی از تجربه شما در این وبسایت، و برای اهداف دیگری که در سیاست حفظ حریم خصوصی توضیح داده شده است.

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > پشتیبانی از چند زبانه ای و محلی سازی Localization در اندروید

پشتیبانی از چند زبانه ای و محلی سازی Localization در اندروید

1399-01-04
ارسال شده توسط آموزنگار
اندروید
گزینش پشتیبانی از چند زبانه ای و محلی سازی Localization در اندروید پشتیبانی از چند زبانه ای و محلی سازی Localization در اندروید

برنامه ­ها شامل منابعی هستند که می­تواند مختص به یک فرهنگ خاص باشد. برای مثال، برنامه می­تواند شامل رشته­ های فرهنگ خاص باشد که به زبان محلی فعلی ترجمه شده است. این یک تمرین خوب برای نگه داشتن منابع فرهنگ خاص است که از بقیه برنامه شما جدا شده است. اندروید منابع زبانها و فرهنگهای خاص را بر اساس تنظیمات محلی سیتم حل می­کند. شما می­توانید با استفاده از منابع فرهنگ لغت در پروژه اندرویدی خود، از محل­های مختلف پشتیبانی کنید.

شما می توانید منابع درخور با فرهنگ افرادی که از برنامه شما استفاده می کنند، را مشخص کنید. شما می توانید هر نوع منبع مناسب برای زبان و فرهنگ کاربران خود را تهیه کنید. برای مثال، تصویر زیر تصویری از یک برنامه را نشان می دهد که رشته ها و منابع تصویری (drawable) در آن دستگاهها به طور پیش فرض زبان محلی (en_US) و زبان اسپانیایی (es_ES)  نمایش داده می شود.

چند زبانه ای در اندروید

شکل 1. برنامه از منابع مختلف وابسته به محل فعلی استفاده می­کند.

اگر پروژه خود را با استفاده از Android SDK Tools ایجاد کردید، ابزارها در سطح بالای پروژه یک شاخه /res ایجاد می­کنند. در داخل این شاخه res/ زیرشاخه ­هایی برای انواع منابع مختلف وجود دارد. همچنین چند فایل پیش­فرض مانند res/values/strings.xml هست که مقدارهای رشته­ای را نگه می­دارد.

پشتیبانی از زبان های مختلف فراتر از استفاده از منابع خاص محلی می­رود. بعضی­ کاربران یک زبان را انتخاب می­کنند که از اسکریپت های راست به چپ (RTL) مانند عربی , فارسی یا عبری برای زبان محلی خود استفاده می کنند. سایر کاربران در یک زبان که از اسکریپت RTL استفاده می کند، می­بینند یا محتوا تولید می­کنند ، حتی اگر یک زبان را با استفاده از اسکریپت های LTR مانند زبان انگلیسی، به عنوان UI محلی خود تنظیم کرده باشند. برای پشتیبانی از هر دو نوع کاربران، برنامه شما نیاز دارند موارد زیر را انجام دهد:

  • یک طرح UI RTL را برای محل­های RTL بکار ببرید.
  • شناسایی و اعلام مسیر اطلاعات متنی که در پیام های فرمت شده نمایش داده می شود. معمولاً، شما فقط می توانید یک روش را انتخاب کنید که متن اطلاعات را برای شما تعیین می کند.

ایجاد راهنماهای محلی و فایل­های منبع

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

1
<resource type>-b+<language code>[+<country code>]

برای مثال، مقدار -b+es/ شامل منابع رشته ای برای محل هایی با کد زبان es است. به همین ترتیب، mipmap-b+es+ES/ شامل آیکن برای محل­هایی با کد زبان es و کد کشور ES است. اندروید منابع مناسب را با توجه به تنظیمات محلی دستگاه در زمان اجرا بارگذاری می­کند.

پس از تصمیم گیری درباره محل­های پشتیبانی، منابع زیر شاخه ها و فایلها را ایجاد کنید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
res/
 
  values
 
    strings.xml
 
   values-b+es/
 
      strings.xml
 
  mipmap/
 
country_flag.png
 
   mipmap-b+es+ES/
 
           country_flag.png

برای مثال، بعضی از فایلهای منابع مختلف برای زبانهای مختلف هستند:

رشته های انگلیسی (محل پیش فرض) /values/strings.xml :

1
2
3
<resources>
    <string name="hello_world">Hello World!</string>
</resources>

رشته های اسپانیایی (محلی es) /values-es/strings.xml :

<resources>

    <stringname="hello_world">¡Hola Mundo!</string>

</resources>

نماد پرچم ایالات متحده امریکا (محل پیش فرض) /mipmap/country_flag.png:

پرچم آمریکا

شکل 2- آیکن استفاده شده برای محل پیش فرض (en_US) ایالات متحده امریکا

پرچم کشور اسپانیا (محل es_ES)، /mipmap-b+es+ES/country_flag.png :

پرچم کشور اسپانیا

پرچم کشور اسپانیا

1
2
3
4
5
6
// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);
  
// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

در دیگر فایلهای xml، شما می¬توانید هر زمان که xml یک مقدار سازگار را قبول می¬کند، به منبع با @/ مراجعه کنید.
برای مثال:

1
2
3
4
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/country_flag" />

فرمت متن در پیامها

یکی از شایع ترین وظایف مشترک در برنامه، قالب بندی متن است. پیام های محلی شده با قرار دادن متن و داده های عددی در موقعیت های مناسب فرمت می شوند. متاسفانه، هنگامی که با داده های UI RTL یا RTL برخورد می شود، قالب بندی ساده می تواند خروجی متن نادرست یا حتی خواندن متن را نمایش دهد.
زبان هایی مانند عربی، عبری، فارسی و اردو به طور کلی در جهت راست به چپ (RTL) نوشته شده است. با این حال برخی از عناصر آنها مانند اعداد و متن چپ به راست (LTR) در جهت LTR در متن متناظر RTL جاسازی و نوشته شده¬اند. زبان هایی که از اسکریپت LTR استفاده می کنند، از جمله انگلیسی نیز دو طرفه هستند، زیرا آنها می توانند شامل اسکریپت های RTL جاسازی شده باشند که باید در جهت RTL نمایش داده شوند.
اغلب اوقات، برنامه ها خودشان این چنین نمونه هایی از جاسازی متن جهت مخالف ایجاد می کنند. آنها داده های متنی یک زبان دلخواه و یک جهت متن دلخواه را به پیام های محلی اضافه می کنند. این مخلوط کردن جهات اغلب شامل نشانه مشخصی از جایی که متن جهت مخالف شروع می شود و به پایان می رسد نیست. این ویژگی های متن تولید شده برنامه باعث بیشتر مشکلات می شود.
اگر چه سیستم پیش فرض بررسی، معمولاً متون دو طرفه متن را ارائه می¬دهد. انتظار می¬رود که ممکن است وقتی برنامه آن را داخل پیام محلی قرار می¬دهد، به درستی ارائه ندهد. موقعیت های زیر مثال هایی از مواردی را ارائه می دهند که احتمالا متن به درستی ظاهر نمی شود:
در همان ابتدای پیام درج شده است:
PERSON_NAME شما را صدا می¬زند.
با عدد شروع می شود، مانند آدرسها یا شماره تلفن:
3210- 654 987
با نقطه گذاری شروع می شود، مانند شماره تلفن:
19876543210+
با نقطه گذاری تمام می شود:
شما مطمئن هستید؟
شامل هر دو جهت است:
کلمه בננה عبری برای موز است.
مثال
به عنوان مثال، فرض کنید که برنامه گاهی اوقات نیاز به نمایش پیام “منظورت این بود S%” ، با آدرس وارد شده به جایS% در زمان اجرا دارد. با اینکه برنامه از محل¬های مختلف UI پشتیبانی می کند، پیام از یک منبع خاص محلی می¬رسد و در جهت RTL استفاده می¬شود وقتی که از یک زبان محلی استفاده کنید. برای UI عبری، باید به صورت زیر ظاهر شود:
האם התכוונת ל %s?
این پیشنهاد، با این حال، ممکن است از یک پایگاه داده باشد که شامل متن در زبان محلی نمی شود. برای مثال، اگر آدرس مورد نظر در سوال برای یک مکان در کالیفرنیا باشد، در پایگاه داده با استفاده از متن انگلیسی ظاهر می شود. اگر آدرس “15 Bay Street, Laurel, CA ” را در پیام RTL بدون ارائه نکات در مورد جهت متن وارد کنید، نتیجه مورد انتظار صحیح نیست:
האם התכוונת ל 15 Bay Street, Laurel, CA?
توجه داشته باشید که شماره خانه در سمت راست آدرس ظاهر می شود، نه در سمت چپ عنوان در نظر گرفته شده، و باعث می شود که شماره خانه بیشتر شبیه یک کد پستی عجیب و غریب باشد. همین مسئله ممکن است اگر متن RTL را در یک پیام که جهت متن LTR استفاده می کند، وارد کنید، رخ دهد.
توضیح و راه حل
مشکل در مثال قبلی به این دلیل اتفاق می افتاد که قالب بندی متن مشخص نمی کند که “15” بخشی از آدرس است، بنابراین سیستم نمی تواند تعیین کند که آیا “15” بخشی از متن RTL است که قبل از متن LTR ارائه می شود یا بعد از آن.
برای حل این مشکل، از روش unicodeWrap() که در کلاس BidiFormatter یافت می شود، در هر قطعه ای از متن که شما در یک پیام محلی قرار داده اید، استفاده می¬شود. تنها زمانی که شما نباید از unicodeWrap() استفاده کنید عبارتند از:
متن در یک رشته ماشین قابل خواندن قرار می گیرد، مانند یک URI یا پرس و جو SQL.
شما می دانید که قطعه متن به درستی بسته شده است.
روش unicodeWrap() جهت یک رشته را تشخیص می دهد و آن را در خط های قالب بندی یونیکد که این جهت را اعلام می کند، پنهان می کند. برای اینکه حالا “15” در داخل متن ظاهر می شود به عنوان LTR اعلام شده است و در موقعیت صحیح نمایش داده می شود:
האם התכוונת ל 15 Bay Street, Laurel, CA?
قطعه کد زیر نشان می دهد که چگونه از unicodeWrap() استفاده کنید:

1
2
3
4
5
6
7
String mySuggestion = "15 Bay Street, Laurel, CA";
BidiFormatter myBidiFormatter = BidiFormatter.getInstance();
  
// The "did_you_mean" localized string resource includes
// a "%s" placeholder for the suggestion.
String.format(R.string.did_you_mean,
        myBidiFormatter.unicodeWrap(mySuggestion));

توجه: اگر برنامه شما برای (Android 4.3 (API level 18 یا بالاتر است، از نسخه BidiFormatter موجود در چارچوب Android استفاده کنید. در غیر این صورت، از نسخه BidiFormatter موجود در کتابخانه پشتیبانی استفاده کنید.
فرمت اعداد
استفاده از فرمت رشته¬ها، نه متدهای تماس، برای تبدیل اعداد به رشته در برنامه بصورت زیر عمل می¬کنیم:

1
String myIntAsString = String.format("%d", myInt);

این دستور اعداد را به طور مناسب برای زبان محلی شما فرمت می کند، که ممکن است شامل استفاده از مجموعه ای متفاوت از رقم ها باشد.
هنگام استفاده از String.format() برای ایجاد یک پرس و جوی SQL در یک دستگاه که از مجموعه ای از ارقام محلی خود استفاده می کند، مانند زبان فارسی و بیشتر مناطق عربی، اگر هر یک از پارامترهای پرس و جو اعداد باشد، مشکلاتی رخ می دهد. این به این دلیل است که عدد در فرمتهای محلی فرمت شده است و این رقمها در SQL معتبر نیستند.
برای حفظ فرمت اعداد ASCII و حفظ پرس و جو معتبر، شما باید به جای استفاده بیش از حد از نسخه String.format() که شامل محلی به عنوان پارامتر اول است. استدلال محلی باید Locale.US باشد.

تزریق زبان (Language Injection) در IntelliJ IDEA
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

پشتیبانی از معکوس کردن طرح¬ (Layout)

افرادی که از اسکریپت RTL (راست به چپ) استفاده می کنند، یک رابط کاربری RTL را ترجیح می دهند که شامل منوهای راست چین شده، متن راست چین و پیکان هایی رو به جلو به سمت چپ است.
شکل 4 مقایسه بین نسخه LTR صفحه نمایش در تنظیمات برنامه و رونوشت RTL آن را نشان می دهد:

انواع LTR  و RTL از یک صفحه نمایش

شکل 4- انواع LTR  و RTL از یک صفحه نمایش

هنگام اضافه کردن پشتیبانی RTL به برنامه خود، مهم است که نکات زیر را در ذهن داشته باشید:

  • معکوس کردن متن RTL در دستگاه های دارای سیستم عامل Android 4.2 (سطح API 17) یا بالاتر پشتیبانی می شود.
  • برای تست اینکه آیا برنامه شما از جهت متنی RTL پشتیبانی می کند، با استفاده از گزینه های توسعه (Developer Option) آزمایش کنید و از افرادی که از اسکریپت RTL استفاده می کنند در برنامه خود دعوت کنید.

نکته: برای مشاهده طراحی دستورالعمل های اضافی مربوط به معکوس کردن لایوت، از جمله لیستی که باید و نباید معکوس کردن باشد، دستورالعمل طراحی متریال Bidirectionality را ببینید.

برای معکوس کردن UI در برنامه خود، به طوری که RTL در یک زبان RTL ظاهر شود، مراحل زیر را انجام دهید.

تغییر ساختار و فایل های مانیفست

فایل build.gridle ماژول برنامه و فایل manifest برنامه خود را به صورت زیر تغییر دهید:

build.gradle (Module: app)

1
 

AndroidManifest.xml

1
 

نکته: اگر برنامه شما به اندروید 4.1.1 (سطح API 16) یا پایین تر برسد، ویژگی android:supportsRtl، نادیده گرفته می شود، همراه با مقادیر ویژگی شروع و پایان که در فایل های لایوت برنامه شما ظاهر می شود. در این حالت، معکوس کردن طرح بندی RTL به طور خودکار در برنامه رخ نمی دهد.

به روزرسانی منابع موجود

به ترتیب در سمت چپ و راست برای شروع و پایان، در هر یک از فایل های منبع موجود خود را تغییر دهید. با انجام این کار، به چارچوب اجازه می دهید که عناصر UI برنامه خود را براساس تنظیمات زبان کاربر تنظیم کند.

توجه: قبل از به­روزرسانی منابع خود، نحوه ارائه پشتیبانی از برنامه­های قدیمی و یا برنامه­هایی که با اندروید 4.1.1 (سطح API 16) و پایین­تر قرار دارند، یاد بگیرید.

برای استفاده از قابلیت هماهنگ سازی چارچوب RTL، ویژگی­ها را در فایل های لایوت خود که در جدول 1 نمایش داده شده، تغییر دهید.

جدول 1. ویژگی هایی که با استفاده از آنها برنامه شما از چندین جهت متن پشتیبانی می­کند

ویژگی پشتیبانی تنها از LTRویژگی پشتیبانی از RTL  و LTR
android:gravity=”left”android:gravity=”start”
android:gravity=”right”android:gravity=”end”
android:layout_gravity=”left”android:layout_gravity=”start”
android:layout_gravity=”right”android:layout_gravity=”end”
android:paddingLeftandroid:paddingStart
android:paddingRightandroid:paddingEnd
android:drawableLeftandroid:drawableStart
android:drawableRightandroid:drawableEnd
android:layout_alignLeftandroid:layout_alignStart
android:layout_alignRightandroid:layout_alignEnd
android:layout_marginLeftandroid:layout_marginStart
android:layout_marginRightandroid:layout_marginEnd
android:layout_alignParentLeftandroid:layout_alignParentStart
android:layout_alignParentRighandroid:layout_alignParentEnd
android:layout_toLeftOfandroid:layout_toStartOf
android:layout_toRightOfandroid:layout_toEndOf

جدول 2 نشان می دهد که چگونه سیستم با استفاده از ویژگی های تراز بندی UI بر اساس target SDK version ، چه ویژگی های چپ و راست تعریف می شود و چه ویژگی های شروع و پایان تعریف می شود.

جدول 2. رفتار عنصر UI بر اساس target SDK version و ویژگی های تعریف شده

Targeting Android 4.2
(API level 17) or higher?
Left and right defined?Start and end defined?Result
YesYesYesstart and end resolved, and override left and right
YesYesNoOnly left and right are used
YesNoYesOnly start and end are used
NoYesYesleft and right are used (start and end are ignored)
NoYesNoOnly left and right are used
NoNoYesstart and end resolved to left and right

اضافه کردن جهت و منابع خاص زبان

این مرحله شامل اضافه کردن نسخه های خاص لایوت، drawables  و ارزش های فایل های منبع است که دارای مقادیر سفارشی برای زبان های مختلف و جهت متن هستند.

ویژگی های برتر اندروید 11 از نظر برنامه نویس ها
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

در اندروید 4.2 (API level 17) و بالاتر، می توانید از مقادیر منابع -ldrtl  (جهت لایوت راست به چپ) و –ldltr (جهت لایوت چپ به راست) استفاده کنید. برای حفظ سازگاری مجدد با بارگیری منابع موجود، نسخه های قدیمی تر از اندروید از زبان شناسان زبان منبع، برای هدایت جهت صحیح متن استفاده می کنند.

فرض کنید شما می خواهید یک فایل لایوت خاص برای پشتیبانی از اسکریپت های RTL، مانند زبان عبری، عربی و فارسی اضافه کنید. برای انجام این کار، شما یک فهرست layout-ldrtl/ در فهرست res/ اضافه می کنید، همانطور که در مثال زیر نشان داده شده است:

1
2
3
4
5
6
res/
    layout/
        main.xml This layout file is loaded by default.
    layout-ldrtl/
        main.xml This layout file is loaded for languages using an
                 RTL text direction, including Arabic, Persian, and Hebrew

اگر می خواهید یک نسخه خاص از لایوت که فقط برای متن عربی طراحی شده است را اضافه کنید، ساختار فهرست شما به به صورت زیر است:

1
2
3
4
5
6
7
8
res/
    layout/
        main.xml This layout file is loaded by default.
    layout-ar/
        main.xml This layout file is loaded for Arabic text.
    layout-ldrtl/
        main.xml This layout file is loaded only for non-Arabic
                 languages that use an RTL text direction.

نکته: منابع اختصاصی زبان، منابع اختصاصی خاصی هستند که اهمیت بیشتری نسبت به منابع پیش فرض دارند.

استفاده از ویجت­های پشتیبانی شده

همانطور که از آندروید 4.2 (API سطح 17)، اکثر عناصر چارچوب رابط کاربر از متن RTL به طور خودکار پشتیبانی می کند. با این حال، چندین عنصر چارچوب، مانند ViewPager، جهت متن RTL را پشتیبانی نمی کنند.

ویجت های روی صفحه نمایش از متن RTL پشتیبانی می کنند تا زمانی که فایل­های manifest مربوطه شامل ویژگی زیر باشد.

android:supportsRtl=”true”

آماده کردن پشتیبانی از برنامه های قدیمی

اگر برنامه شما targets Android 4.1.1 (سطح API 16) یا پایین تر باشد، همچنین علاوه بر ویژگیهای چپ و راست، شروع و پایان را نیز شامل می شود.

برای بررسی اینکه آیا لایوت شما باید از جهت متن RTL استفاده کند، از دستورات زیر استفاده کنید:

1
2
3
4
5
6
7
8
private boolean shouldUseLayoutRtl() {
    if (android.os.Build.VERSION.SDK_INT &gt;=
            android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        return View.LAYOUT_DIRECTION_RTL == getLayoutDirection();
    } else {
        return false;
    }
}

توجه: برای جلوگیری از مسائل سازگاری، از نسخه 23.0.1 یا بالاتر از ابزارهای Android SDK Build Tools استفاده کنید.

تست با استفاده از گزینه های توسعه دهنده

در دستگاههایی که از Android 4.4 (API level 19) یا بالاتر استفاده می کنند، می توانید جهت لایوت RTL را در گزینه های توسعه دهنده دستگاه خود فعال کنید. این تنظیم به شما اجازه می دهد که متن را با استفاده از اسکریپت LTR، مانند متن انگلیسی، در حالت RTL مشاهده کنید.

به روز رسانی منطق برنامه

این بخش مکان های خاصی را در منطق برنامه شما توضیح می دهد که هنگام انطباق برنامه خود برای دست زدن به چند جهت متن، باید به روزرسانی کنید.

تغییرات ویژگیها

برای رسیدگی به تغییر در هر ویژگی مرتبط با RTL، مانند جهت لایوت، پارامترهای لایوت، پیمایش، جهت متن، ترازبندی متن، و یا موقعیت  drawable- شما می توانید از onRtlPropertiesChanged() استفاده کنید. این فراخوانی به شما امکان می دهد جهت فعلی لایوت را به دست آورید و بر اساس یک اکتیویتی اشیا را به روز کنید.

View ها ( اشیاء)

اگر شما یک ویجت UI ایجاد کنید که به طور مستقیم بخشی از یک سلسله مراتب View اکتیویتی نیست، مانند یک محاوره یا یک عنصر UI مانند toast، بسته به نوع context را انتخاب کنید. قطعه کد زیر نشان می دهد چگونه برای تکمیل این فرآیند عمل کنید:

1
2
3
final Configuration config =
    getContext().getResources().getConfiguration();
view.setLayoutDirection(config.getLayoutDirection());

چند روش از کلاس View نیاز به توجه بیشتر دارد:

onMeasure()

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

onLayout()

اگر شما پیاده سازی لایوت خود را ایجاد کنید، باید در نسخه ی شما onLayout() از super() صدا زده شود و منطق سفارشی خود را برای پشتیبانی از اسکریپت های RTL تطبیق دهید.

onDraw()

اگر شما یک نمایه سفارشی یا اضافه کردن قابلیت های پیشرفته به نقاشی را اجرا می کنید، باید کد خود را برای پشتیبانی از اسکریپت های RTL به روز کنید. از کد زیر استفاده کنید تا تعیین کنید که ویجت شما در حالت RTL است:

1
2
3
4
5
// On devices running Android 4.1.1 (API level 16) and lower,
// you can call the isLayoutRtl() system method directly.
public boolean isLayoutRtl() {
    return (getLayoutDirection() == LAYOUT_DIRECTION_RTL);
}

Drawable ها

اگر یک drawable داشته باشید که برای یک لایوت RTL معکوس شده باشد، یکی از این مراحل را بر اساس نسخه Android که در دستگاه اجرا می شود، کامل کنید:

  • در دستگاه هایی که از Android 4.3 (API level 18) و پایینتر استفاده می کنند، شما باید فایلهای منبع -ldrtl را اضافه و تعریف کنید.
  • در Android 4.4 (API level 19) و بالاتر، می توانید از android:autoMirrored=”true” استفاده کنید، هنگام تعریف مجدد Drawable، اجازه می دهد تا سیستم را برای معکوس سازی طرح RTL آماده کنید.

توجه: ویژگی android:autoMirrored فقط برای drawable های ساده کار می کند که دو برابر شدن معکوس دو طرفه به سادگی یک معکوس گرافیکی از کل drawable است. اگر drawable شما شامل عناصر متعدد است، و یا اگر منعکس کننده drawable شما می تواند ترجمه خود را تغییر دهید، شما باید خود معکوس را انجام دهد. هر گاه امکان پذیر است، با یک کارشناس دو طرفه بررسی کنید تا مشخص شود آیا drawables های معکوس شما برای کاربران حساس هستند یا خیر.

درجه کشش (Gravity)

اگر کد برنامه شما از Gravity.LEFT یا Gravity.RIGHT استفاده کند، باید این مقادیر را به Gravity.START و Gravity.END تغییر دهید.

به عنوان مثال، اگر شما از کد زیر استفاده می کنید:

1
2
3
4
5
6
7
8
switch (gravity &amp; Gravity.HORIZONTAL_GRAVITY_MASK) {
    case Gravity.LEFT:
        // Handle objects that are left-aligned.
        break;
    case Gravity.RIGHT:
        // Handle objects that are right-aligned.
        break;
}

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

1
2
3
4
5
6
7
8
9
10
11
final int layoutDirection = getLayoutDirection();
final int absoluteGravity =
        Gravity.getAbsoluteGravity(gravity, layoutDirection);
switch (absoluteGravity &amp; Gravity.HORIZONTAL_GRAVITY_MASK) {
    case Gravity.LEFT:
        // Handle objects that are left-aligned.
        break;
    case Gravity.RIGHT:
        // Handle objects that are right-aligned.
        break;
}

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

نکته: هنگام استفاده از تنظیمات Gravity، از یک نسخه بیش از حد Gravity.apply() استفاده کنید که شامل یک آرگومان layoutDirection است.

حاشیه بیرونی و حاشیه خارجی (Margin and Padding)

برای پشتیبانی از اسکریپت های RTL در برنامه خود، به دنبال بهترین شیوه های مربوط به ارزش حاشیه و فاصله داخلی باشید:

  • از getMarginStart() و getMarginEnd()به جای معادلهای مشخصه جهت، leftMargin و RightMargin استفاده کنید.
  • هنگام استفاده از setMargins() اگر برنامه شما اسکریپت RTL را تشخیص دهد، ارزش های استدلال چپ و راست را مبادله می کند.

اگر برنامه شما شامل منطق Padding سفارشی باشد، ()setPadding و ()setPaddingRelative را نادیده بگیرید.

قبلی نرم افزار متن باز Open Source چیست؟
بعدی ۵ امولاتور آنلاین برتر در اندروید

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

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

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=10731
  • Afghanistan (+93)
  • Albania (+355)
  • Algeria (+213)
  • American Samoa (+1)
  • Andorra (+376)
  • Angola (+244)
  • Anguilla (+1)
  • Antigua (+1)
  • Argentina (+54)
  • Armenia (+374)
  • Aruba (+297)
  • Australia (+61)
  • Austria (+43)
  • Azerbaijan (+994)
  • Bahrain (+973)
  • Bangladesh (+880)
  • Barbados (+1)
  • Belarus (+375)
  • Belgium (+32)
  • Belize (+501)
  • Benin (+229)
  • Bermuda (+1)
  • Bhutan (+975)
  • Bolivia (+591)
  • Bonaire, Sint Eustatius and Saba (+599)
  • Bosnia and Herzegovina (+387)
  • Botswana (+267)
  • Brazil (+55)
  • British Indian Ocean Territory (+246)
  • British Virgin Islands (+1)
  • Brunei (+673)
  • Bulgaria (+359)
  • Burkina Faso (+226)
  • Burundi (+257)
  • Cambodia (+855)
  • Cameroon (+237)
  • Canada (+1)
  • Cape Verde (+238)
  • Cayman Islands (+1)
  • Central African Republic (+236)
  • Chad (+235)
  • Chile (+56)
  • China (+86)
  • Colombia (+57)
  • Comoros (+269)
  • Cook Islands (+682)
  • Côte d'Ivoire (+225)
  • Costa Rica (+506)
  • Croatia (+385)
  • Cuba (+53)
  • Curaçao (+599)
  • Cyprus (+357)
  • Czech Republic (+420)
  • Democratic Republic of the Congo (+243)
  • Denmark (+45)
  • Djibouti (+253)
  • Dominica (+1)
  • Dominican Republic (+1)
  • Ecuador (+593)
  • Egypt (+20)
  • El Salvador (+503)
  • Equatorial Guinea (+240)
  • Eritrea (+291)
  • Estonia (+372)
  • Ethiopia (+251)
  • Falkland Islands (+500)
  • Faroe Islands (+298)
  • Federated States of Micronesia (+691)
  • Fiji (+679)
  • Finland (+358)
  • France (+33)
  • French Guiana (+594)
  • French Polynesia (+689)
  • Gabon (+241)
  • Georgia (+995)
  • Germany (+49)
  • Ghana (+233)
  • Gibraltar (+350)
  • Greece (+30)
  • Greenland (+299)
  • Grenada (+1)
  • Guadeloupe (+590)
  • Guam (+1)
  • Guatemala (+502)
  • Guernsey (+44)
  • Guinea (+224)
  • Guinea-Bissau (+245)
  • Guyana (+592)
  • Haiti (+509)
  • Honduras (+504)
  • Hong Kong (+852)
  • Hungary (+36)
  • Iceland (+354)
  • India (+91)
  • Indonesia (+62)
  • Iran (+98)
  • Iraq (+964)
  • Ireland (+353)
  • Isle Of Man (+44)
  • Israel (+972)
  • Italy (+39)
  • Jamaica (+1)
  • Japan (+81)
  • Jersey (+44)
  • Jordan (+962)
  • Kazakhstan (+7)
  • Kenya (+254)
  • Kiribati (+686)
  • Kuwait (+965)
  • Kyrgyzstan (+996)
  • Laos (+856)
  • Latvia (+371)
  • Lebanon (+961)
  • Lesotho (+266)
  • Liberia (+231)
  • Libya (+218)
  • Liechtenstein (+423)
  • Lithuania (+370)
  • Luxembourg (+352)
  • Macau (+853)
  • Macedonia (+389)
  • Madagascar (+261)
  • Malawi (+265)
  • Malaysia (+60)
  • Maldives (+960)
  • Mali (+223)
  • Malta (+356)
  • Marshall Islands (+692)
  • Martinique (+596)
  • Mauritania (+222)
  • Mauritius (+230)
  • Mayotte (+262)
  • Mexico (+52)
  • Moldova (+373)
  • Monaco (+377)
  • Mongolia (+976)
  • Montenegro (+382)
  • Montserrat (+1)
  • Morocco (+212)
  • Mozambique (+258)
  • Myanmar (+95)
  • Namibia (+264)
  • Nauru (+674)
  • Nepal (+977)
  • Netherlands (+31)
  • New Caledonia (+687)
  • New Zealand (+64)
  • Nicaragua (+505)
  • Niger (+227)
  • Nigeria (+234)
  • Niue (+683)
  • Norfolk Island (+672)
  • North Korea (+850)
  • Northern Mariana Islands (+1)
  • Norway (+47)
  • Oman (+968)
  • Pakistan (+92)
  • Palau (+680)
  • Palestine (+970)
  • Panama (+507)
  • Papua New Guinea (+675)
  • Paraguay (+595)
  • Peru (+51)
  • Philippines (+63)
  • Poland (+48)
  • Portugal (+351)
  • Puerto Rico (+1)
  • Qatar (+974)
  • Republic of the Congo (+242)
  • Romania (+40)
  • Reunion (+262)
  • Russia (+7)
  • Rwanda (+250)
  • Saint Helena (+290)
  • Saint Kitts and Nevis (+1)
  • Saint Pierre and Miquelon (+508)
  • Saint Vincent and the Grenadines (+1)
  • Samoa (+685)
  • San Marino (+378)
  • Sao Tome and Principe (+239)
  • Saudi Arabia (+966)
  • Senegal (+221)
  • Serbia (+381)
  • Seychelles (+248)
  • Sierra Leone (+232)
  • Singapore (+65)
  • Sint Maarten (+1)
  • Slovakia (+421)
  • Slovenia (+386)
  • Solomon Islands (+677)
  • Somalia (+252)
  • South Africa (+27)
  • South Korea (+82)
  • South Sudan (+211)
  • Spain (+34)
  • Sri Lanka (+94)
  • St. Lucia (+1)
  • Sudan (+249)
  • Suriname (+597)
  • Swaziland (+268)
  • Sweden (+46)
  • Switzerland (+41)
  • Syria (+963)
  • Taiwan (+886)
  • Tajikistan (+992)
  • Tanzania (+255)
  • Thailand (+66)
  • The Bahamas (+1)
  • The Gambia (+220)
  • Timor-Leste (+670)
  • Togo (+228)
  • Tokelau (+690)
  • Tonga (+676)
  • Trinidad and Tobago (+1)
  • Tunisia (+216)
  • Turkey (+90)
  • Turkmenistan (+993)
  • Turks and Caicos Islands (+1)
  • Tuvalu (+688)
  • U.S. Virgin Islands (+1)
  • Uganda (+256)
  • Ukraine (+380)
  • United Arab Emirates (+971)
  • United Kingdom (+44)
  • United States (+1)
  • Uruguay (+598)
  • Uzbekistan (+998)
  • Vanuatu (+678)
  • Venezuela (+58)
  • Vietnam (+84)
  • Wallis and Futuna (+681)
  • Western Sahara (+212)
  • Yemen (+967)
  • Zambia (+260)
  • Zimbabwe (+263)
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط