برنامه خود را محلی سازی کنید (Views)

مفاهیم و پیاده‌سازی Jetpack Compose

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

این صفحه برخی از بهترین شیوه‌ها برای بومی‌سازی برنامه‌های اندروید را شرح می‌دهد.

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

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

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

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

استفاده از منابع برای محلی‌سازی

این بخش نحوه ایجاد منابع پیش‌فرض و همچنین منابع جایگزین را مورد بحث قرار می‌دهد. همچنین توضیح می‌دهد که چگونه به منابع اولویت داده می‌شود و چگونه می‌توانید در کد به منابع خود ارجاع دهید.

ایجاد منابع پیش‌فرض

متن پیش‌فرض برنامه را در res/values/strings.xml قرار دهید. برای این رشته‌ها، از زبان پیش‌فرض استفاده کنید - زبانی که انتظار دارید اکثر کاربران برنامه شما به آن صحبت کنند.

مجموعه منابع پیش‌فرض همچنین شامل هرگونه drawable و layout پیش‌فرض می‌شود و می‌تواند شامل انواع دیگری از منابع مانند انیمیشن‌ها باشد. این منابع در دایرکتوری‌های زیر قرار می‌گیرند:

  • res/drawable/ : دایرکتوری مورد نیاز که حداقل یک فایل گرافیکی برای آیکون برنامه در گوگل پلی دارد.
  • res/layout/ : دایرکتوری مورد نیاز که حاوی یک فایل XML است که طرح‌بندی پیش‌فرض را تعریف می‌کند.
  • res/anim/ : در صورت وجود پوشه‌های res/anim- <qualifiers> مورد نیاز است.
  • res/xml/ : در صورت وجود پوشه‌های res/xml- <qualifiers> مورد نیاز است.
  • res/raw/ : در صورت وجود پوشه‌های res/raw- <qualifiers> مورد نیاز است.

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

نکات محلی سازی

هنگام بومی‌سازی برنامه خود، این نکات را دنبال کنید.

طراحی یک طرح‌بندی انعطاف‌پذیر

اگر نیاز دارید طرح‌بندی خود را برای تطبیق با یک زبان خاص تغییر دهید، می‌توانید یک طرح‌بندی جایگزین برای آن زبان ایجاد کنید، مانند res/layout-de/main.xml برای طرح‌بندی به زبان آلمانی. با این حال، انجام این کار می‌تواند نگهداری برنامه شما را دشوارتر کند. بهتر است یک طرح‌بندی واحد ایجاد کنید که انعطاف‌پذیرتر باشد.

یکی دیگر از موقعیت‌های معمول، زبانی است که به طرح‌بندی متفاوتی نیاز دارد. برای مثال، ممکن است فرم تماسی داشته باشید که وقتی برنامه به زبان ژاپنی اجرا می‌شود، شامل دو فیلد نام باشد، اما وقتی برنامه به زبان دیگری اجرا می‌شود، شامل سه فیلد نام باشد. می‌توانید این را به دو روش مدیریت کنید:

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

از شیء Context اندروید برای جستجوی دستی زبان استفاده کنید

شما می‌توانید با استفاده از شیء Context که اندروید در دسترس قرار می‌دهد، همانطور که در مثال زیر نشان داده شده است، زبان را جستجو کنید:

کاتلین

val primaryLocale: Locale = context.resources.configuration.locales[0]
val locale: String = primaryLocale.displayName

جاوا

Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0);
String locale = primaryLocale.getDisplayName();