اولویت‌های زبان هر برنامه

زبان‌های هر برنامه در تنظیمات سیستم

در بسیاری از موارد، کاربران چندزبانه زبان سیستم خود را روی یک زبان (مثلاً انگلیسی) تنظیم می‌کنند، اما می‌خواهند زبان‌های دیگری را برای برنامه‌های خاصی انتخاب کنند (مثلاً هلندی، چینی، یا هندی). برای کمک به برنامه‌ها در ارائه تجربه بهتر به این کاربران، Android 13 ویژگی‌های زیر را برای برنامه‌هایی که از چند زبان پشتیبانی می‌کنند معرفی می‌کند:

  • تنظیمات سیستم: مکانی متمرکز که کاربران می‌توانند زبان ترجیحی را برای هر برنامه انتخاب کنند.

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

  • میاناهای برنامه‌سازی کاربردی اضافی: این میاناهای برنامه‌سازی کاربردی عمومی، مثل روش‌های setApplicationLocales و getApplicationLocales در LocaleManager، به برنامه‌ها اجازه می‌دهند در زمان اجرا زبانی متفاوت از زبان سیستم تنظیم کنند.

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

    برای سازگاری با نسخه‌های قدیمی‌تر Android، میاناهای برنامه‌سازی کاربردی معادل در AndroidX نیز دردسترس است. بااین‌حال، میاناهای برنامه‌سازی کاربردی سازگار با نسخه قدیمی با بافت AppCompatActivity کار می‌کنند، نه بافت برنامه، برای Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۲) و نسخه‌های قدیمی‌تر. با Appcompat 1.6.0 یا بالاتر به میاناهای برنامه‌سازی کاربردی سازگار با نسخه قدیمی دسترسی پیدا کنید.

نمای کلی پیاده‌سازی این ویژگی

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

مورد استفاده پیاده‌سازی توصیه‌شده
برنامه‌تان انتخابگر زبان درون‌برنامه‌ای ندارد
  1. پشتیبانی خودکار از زبان برای هر برنامه را فعال کنید تا فایل LocaleConfig تولید شود و زبان‌های برنامه‌تان به تنظیمات سیستم اضافه شود.
  2. درصورت تمایل، اگر می‌خواهید انتخابگر زبان درون‌برنامه اضافه کنید: یکی را در Compose پیاده‌سازی کنید یا از کتابخانه AndroidX استفاده کنید و با موافقت کردن با پیاده‌سازی میانای برنامه‌سازی کاربردی ما، از سازگاری با نسخه قدیمی ازطریق autoStoreLocales پشتیبانی کنید.
برنامه شما ازقبل انتخابگر زبان درون‌برنامه‌ای دارد
  1. پشتیبانی خودکار از زبان برای هر برنامه را فعال کنید تا فایل LocaleConfig تولید شود و زبان‌های برنامه‌تان به تنظیمات سیستم اضافه شود.
  2. منطق سفارشی برنامه‌تان را برای استفاده از Compose یا میاناهای برنامه‌سازی کاربردی عمومی انتقال دهید تا مطمئن شوید کاربران تجربه‌ای یکپارچه را مشاهده می‌کنند.
  3. موارد گوشه‌ای زیر را مدیریت کنید:
    1. AppCompatDelegate.setApplicationLocales را اولین‌باری که برنامه‌تان در دستگاه دارای Android 13 اجرا می‌شود فراخوانی کنید.
    2. برای موارد زیر، AppCompatDelegate.setApplicationLocales را فراخوانی کنید تا منطقه‌های زبانی ازپیش موجود درخواست‌شده توسط کاربر را به سیستم ارائه دهید:

تنظیمات سیستم برای کاربران

از Android نسخه ۱۳ به بعد، Android شامل مکانی متمرکز در تنظیمات سیستم برای تنظیم اولویت‌های زبان هر برنامه است. برای اطمینان از اینکه زبان‌های برنامه‌تان در تنظیمات سیستم در دستگاه‌های دارای Android نسخه ۱۳ یا بالاتر قابل‌پیکربندی است، پشتیبانی خودکار از زبان برای هر برنامه را فعال کنید (توصیه می‌شود) یا پشتیبانی را به‌صورت دستی پیکربندی کنید.

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

این روش توصیه‌شده برای افزودن پشتیبانی از زبان برای هر برنامه به برنامه‌هایتان است، زیرا نیازی به اصلاحات XML ندارد.

با شروع از Android Studio Giraffe و AGP 8.1، می‌توانید برنامه‌تان را به‌گونه‌ای پیکربندی کنید که به‌طور خودکار از اولویت‌های زبان هر برنامه پشتیبانی کند. براساس منابع پروژه شما، AGP فایل LocaleConfig را تولید می‌کند و مرجعی به آن در فایل مانیفست نهایی اضافه می‌کند، بنابراین دیگر نیازی به انجام دستی آن ندارید. AGP از منابع موجود در پوشه‌های res پیمانه‌های برنامه شما و هرگونه وابستگی پیمانه کتابخانه برای تعیین زبان‌های موجود در فایل LocaleConfig استفاده می‌کند. این یعنی اگر منابعی را برای زبان جدیدی به برنامه‌تان اضافه کنید، لازم نیست نگران به‌روزرسانی فایل LocaleConfig باشید.

توجه داشته باشید که ویژگی زبان خودکار برای هر برنامه از برنامه‌هایی پشتیبانی می‌کند که Android نسخه ۱۳ (سطح میانای برنامه‌سازی کاربردی ۳۳) یا بالاتر را اجرا می‌کنند. برای استفاده از این ویژگی، باید compileSdkVersion را روی ۳۳ یا بالاتر تنظیم کنید. برای پیکربندی اولویت‌های زبان هر برنامه برای نسخه‌های قبلی Android، همچنان باید از میاناهای برنامه‌سازی کاربردی و انتخابگرهای زبان درون‌برنامه استفاده کنید.

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

  1. برای روشن کردن این ویژگی، از تنظیم generateLocaleConfig در بلوک androidResources {} فایل build.gradle.kts در سطح ماژول (فایل build.gradle اگر از Groovy استفاده می‌کنید) استفاده کنید. این ویژگی به‌طور پیش‌فرض خاموش است.

کاتلین

    android {
      androidResources {
        generateLocaleConfig = true
      }
    }

شیک

  android {
    androidResources {
      generateLocaleConfig true
    }
  }
  1. منطقه پیش‌فرضی را مشخص کنید:
    1. در پوشه res واحد برنامه، فایل جدیدی به‌نام resources.properties ایجاد کنید.
    2. در فایل resources.properties، منطقه پیش‌فرض را با برچسب unqualifiedResLocale تنظیم کنید. برای قالب‌بندی نام‌های محلی، به نحوه تشکیل نام‌های محلی مراجعه کنید.

AGP این زبان پیش‌فرض و هر زبان جایگزین دیگری را که مشخص کرده‌اید، بااستفاده از دایرکتوری‌های values-* در پوشه res، به فایل LocaleConfig که به‌طور خودکار تولید شده است اضافه می‌کند.

نحوه تشکیل نام‌های محلی

برای تشکیل نام‌های منطقه زبانی، کد زبان را با کد اختیاری منطقه و نوشتار ترکیب کنید و هرکدام را با خط تیره جدا کنید:

  • زبان: از کد دو یا سه حرفی ISO 639-2 استفاده کنید.
  • خط (اختیاری): از کد ISO 15924 استفاده کنید.
  • منطقه (اختیاری): از کد دوحرفی ISO 3166-1-alpha-2 یا کد سه‌رقمی UN_M.49 استفاده کنید.

برای مثال، اگر منطقه زبانی پیش‌فرض شما انگلیسی امریکایی است:

unqualifiedResLocale=en-US

از android:localeConfig برای افزودن زبان‌های پشتیبانی‌شده به تنظیمات سیستم استفاده کنید

می‌توانید برنامه‌تان را به‌صورت دستی راه‌اندازی کنید تا مطمئن شوید زبان‌های آن در تنظیمات سیستم در دستگاه‌های دارای Android نسخه ۱۳ یا بالاتر قابل‌پیکربندی است. برای انجام این کار، یک فایل XML locale_config ایجاد کنید و آن را بااستفاده از مشخصه android:localeConfig به مانیفست برنامه‌تان اضافه کنید. حذف ورودی مانیفست android:localeConfig نشان می‌دهد که کاربران نباید بتوانند زبان برنامه شما را مستقل از زبان سیستم در تنظیمات سیستم تنظیم کنند.

برای افزودن دستی زبان‌های پشتیبانی‌شده برنامه‌تان به تنظیمات سیستم کاربر:

  1. فایلی به‌نام res/xml/locale_config.xml ایجاد کنید و زبان‌های برنامه‌تان را مشخص کنید، ازجمله منطقه زبانی بازگشتی نهایی برنامه‌تان که منطقه زبانی مشخص‌شده در res/values/strings.xml است.

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

    برای مثال، فایل locale_config.xml را برای برنامه‌ای که از زبان‌های زیر پشتیبانی می‌کند، به این صورت قالب‌بندی کنید:

    • انگلیسی (ایالات متحده) به‌عنوان زبان بازگشت نهایی
    • انگلیسی (پادشاهی متحد)
    • فرانسوی
    • ژاپنی
    • چینی (ساده‌شده، ماکائو)
    • چینی (سنتی، ماکائو)
    <?xml version="1.0" encoding="utf-8"?>
    <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
       <locale android:name="en-US"/>
       <locale android:name="en-GB"/>
       <locale android:name="fr"/>
       <locale android:name="ja"/>
       <locale android:name="zh-Hans-MO"/>
       <locale android:name="zh-Hant-MO"/>
    </locale-config>
    
  2. در مانیفست، خطی اضافه کنید که به این فایل جدید اشاره کند:

    <manifest>
        ...
        <application
            ...
            android:localeConfig="@xml/locale_config">
        </application>
    </manifest>
    

می‌توانید localeConfig برنامه‌تان را با LocaleManager.setOverrideLocaleConfig به‌طور پویا به‌روز کنید تا مجموعه زبان‌های نمایش‌داده‌شده در فهرست زبان هر برنامه را در «تنظیمات Android» سفارشی‌سازی کنید. این کار به شما امکان می‌دهد فهرست زبان را برای هر منطقه سفارشی‌سازی کنید، آزمایش‌های آ/ب اجرا کنید، و اگر برنامه‌تان از ارسال‌های بومی‌سازی سمت سرور استفاده می‌کند، زبان‌های به‌روزشده ارائه دهید، همان‌طور که در مثال زیر نشان داده شده است:

//For setOverrideLocaleConfig
val localeManager = applicationContext
    .getSystemService(LocaleManager::class.java)
localeManager.overrideLocaleConfig = LocaleConfig(
LocaleList.forLanguageTags("en-US,ja-JP,zh-Hans-SG")
)

//For getOverrideLocaleConfig
// The app calls the API to get the override LocaleConfig
val overrideLocaleConfig = localeManager.overrideLocaleConfig
// If the returned overrideLocaleConfig isn't equal to NULL, then the app calls the API to get the supported Locales
val supportedLocales = overrideLocaleConfig.supportedLocales()

علاوه‌براین، IMEها اکنون می‌توانند از LocaleManager.getApplicationLocales استفاده کنند تا زبان میانای کاربر برنامه فعلی را بدانند و زبان صفحه‌کلید را به‌روز کنند، همان‌طور که نشان داده شده است:

val currentAppLocales: LocaleList = applicationContext.getSystemService(LocaleManager::class.java).getApplicationLocales(appPackageName)

مشخص کردن زبان‌های پشتیبانی‌شده در Gradle

اگر ازقبل وجود ندارد، همان زبان‌ها را بااستفاده از ویژگی resourceConfigurations در فایل build.gradle در سطح ماژول برنامه‌تان مشخص کنید:

android {
  ...
  defaultConfig {
    resourceConfigurations += ["en", "en-rGB", "fr", "ja", "b+zh+Hans+MO", "b+zh+Hant+MO"]
  }
}

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

نحوه انتخاب زبان برنامه توسط کاربران در تنظیمات سیستم

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

  • دسترسی ازطریق تنظیمات سیستم

    تنظیمات > سیستم > زبان‌ها و ورودی > زبان‌های برنامه > (انتخاب برنامه)

  • دسترسی ازطریق تنظیمات برنامه‌ها

    تنظیمات > برنامه‌ها > (انتخاب برنامه) > زبان

مدیریت انتخاب‌گرهای زبان درون‌برنامه

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

پیاده‌سازی بااستفاده از Jetpack Compose

برای برنامه‌هایی که کاملاً با Jetpack Compose ساخته شده‌اند، سیستم به‌طور خودکار به‌روزرسانی‌های واسط کاربر را هنگام تغییر زبان برنامه مدیریت می‌کند. فراخوانی میانای برنامه‌سازی کاربردی برای تنظیم زبان جدید تغییری در پیکربندی ایجاد می‌کند. Compose با ترکیب‌بندی مجدد واسط کاربر شما واکنش نشان می‌دهد و به‌طور خودکار هرگونه فراخوانی stringResource را بااستفاده از زبان جدید حل می‌کند.

برای سازگاری با نسخه‌های قدیمی‌تر Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۲) و پایین‌تر، اکیداً توصیه می‌کنیم هنگام پیاده‌سازی انتخابگر زبان درون‌برنامه از کتابخانه پشتیبانی AndroidX (AppCompatDelegate) استفاده کنید. اگر از این رویکرد استفاده می‌کنید، فعالیتی که میزبان Compose UI شما است باید AppCompatActivity را گسترش دهد. بااین‌حال، درصورت نیاز می‌توانید میاناهای برنامه‌سازی کاربردی چارچوب را مستقیماً پیاده‌سازی کنید.

تکه‌کد زیر مثالی از نحوه خواندن زبان فعلی برنامه و تنظیم زبان جدید در تابع ترکیب‌پذیر را نشان می‌دهد:

import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.core.os.LocaleListCompat

@Composable
fun LanguageSelector() {
    // Retrieve the currently configured app locale.
    // If no app-specific locale is set, LocaleListCompat.get(0) returns null,
    // so we safely fall back to a default (e.g., "en").
    val appLocales = AppCompatDelegate.getApplicationLocales()
    val currentLocaleTag = appLocales.get(0)?.toLanguageTag() ?: "en"

    // Example UI: A button to toggle between English and Spanish
    Button(
        onClick = {
            val newLanguageTag = if (currentLocaleTag == "en") "es" else "en"
            val localeList = LocaleListCompat.forLanguageTags(newLanguageTag)

            // Setting the locale re-creates the Activity by default,
            // which automatically applies the new configuration to Compose.
            AppCompatDelegate.setApplicationLocales(localeList)
        }
    ) {
        Text(
            text = if (currentLocaleTag == "en") "Switch to Spanish" else "Switch to English"
        )
    }
}

برای تنظیم زبان ترجیحی کاربر، از کاربر می‌خواهید منطقه‌ای را در انتخابگر زبان انتخاب کند، سپس آن مقدار را در سیستم تنظیم می‌کنید:

val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY")
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale)

توجه داشته باشید که فراخوانی setApplicationLocales باعث می‌شود Activity شما دوباره ایجاد شود، مگراینکه برنامه‌تان تغییرات پیکربندی منطقه زبانی را خودش مدیریت کند.

از AppCompatDelegate.getApplicationLocales برای بازیابی منطقه زبانی ترجیحی کاربر استفاده کنید. ممکن است کاربر منطقه زبانی برنامه‌اش را از تنظیمات سیستم یا از انتخابگر زبان درون‌برنامه‌ای شما انتخاب کرده باشد.

پشتیبانی از Android 12 و نسخه‌های پایین‌تر

برای پشتیبانی از دستگاه‌های دارای Android 12 (سطح API‏ ۳۲) و پایین‌تر، به AndroidX بگویید که فضای ذخیره‌سازی محلی را با تنظیم مقدار autoStoreLocales روی true و android:enabled روی false در ورودی مانیفست برای سرویس AppLocalesMetadataHolderService برنامه‌تان مدیریت کند، همان‌طور که در قطعه کد زیر نشان داده شده است:

<application
  ...
  <service
    android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
    android:enabled="false"
    android:exported="false">
    <meta-data
      android:name="autoStoreLocales"
      android:value="true" />
  </service>
  ...
</application>

توجه داشته باشید که تنظیم مقدار autoStoreLocales روی true باعث مسدودسازی خواندن در رشته اصلی می‌شود و اگر نقض‌های رشته را ثبت می‌کنید، ممکن است باعث نقض StrictMode diskRead و diskWrite شود. برای اطلاعات بیشتر، AppCompatDelegate.setApplicationLocales را ببینید.

مدیریت سفارشی فضای ذخیره‌سازی

حذف ورودی مانیفست یا تنظیم autoStoreLocales روی false نشان می‌دهد که شما فضای ذخیره‌سازی خودتان را مدیریت می‌کنید. در این حالت، باید زبان‌های ذخیره‌شده را قبل‌از onCreate در چرخه حیات فعالیت ارائه دهید و تماس‌ها را به AppCompatDelegate.setApplicationLocales در Android 12 (سطح API‏ ۳۲) یا پایین‌تر محدود کنید.

اگر برنامه‌تان مکان ذخیره‌سازی منطقه زبانی سفارشی دارد، توصیه می‌کنیم از انتقال یک‌باره بین راهکار ذخیره‌سازی منطقه زبانی سفارشی و autoStoreLocales استفاده کنید تا کاربران همچنان بتوانند از برنامه‌تان به زبان ترجیحی‌شان لذت ببرند. این موضوع به‌ویژه در مواردی که برنامه‌تان برای اولین‌بار پس‌از ارتقای دستگاه به Android 13 اجرا می‌شود، کاربرد دارد. در این حالت، می‌توانید با بازیابی منطقه‌های زبانی از فضای ذخیره‌سازی سفارشی‌تان و ارسال آن‌ها به AppCompatDelegate.setApplicationLocales، منطقه‌های زبانی ازپیش موجود و درخواست‌شده توسط کاربر را ارائه دهید.

پیاده‌سازی بااستفاده از میاناهای برنامه‌سازی کاربردی چارچوب Android

درحالی‌که اکیداً توصیه می‌کنیم از کتابخانه پشتیبانی AndroidX برای پیاده‌سازی انتخابگرهای زبان درون‌برنامه استفاده کنید، می‌توانید از روش‌های setApplicationLocales و getApplicationLocales در چارچوب Android برای دستگاه‌های دارای Android 13 نیز استفاده کنید.

تکه‌کد زیر نشان می‌دهد که چگونه می‌توان زبان ترجیحی کاربر را بااستفاده از سرویس سیستم LocaleManager تنظیم و دریافت کرد:

import android.app.LocaleManager
import android.content.Context
import android.os.Build
import android.os.LocaleList
import androidx.annotation.RequiresApi
import java.util.Locale

@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun setAppLanguage(context: Context, languageTag: String) {
    // 1. Retrieve the system service
    val localeManager = context.getSystemService(LocaleManager::class.java)

    // 2. Create a LocaleList from the language tag (e.g., "es-ES" or "ja")
    val localeList = LocaleList(Locale.forLanguageTag(languageTag))

    // 3. Set the locale. The system automatically updates the locale and
    // restarts the app, including any necessary configuration updates.
    localeManager.applicationLocales = localeList
}

@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun getAppLanguage(context: Context): String {
    val localeManager = context.getSystemService(LocaleManager::class.java)
    val currentLocales = localeManager.applicationLocales

    // Return the primary app locale, or fall back to the system default
    return if (!currentLocales.isEmpty) {
        currentLocales.get(0).toLanguageTag()
    } else {
        Locale.getDefault().toLanguageTag()
    }
}

روال‌های مطلوب بیشتر

به روال‌های مطلوب زیر توجه کنید.

هنگام فراخوانی قصد در برنامه‌ای دیگر، زبان را درنظر بگیرید

هدف‌های متمرکز بر زبان ممکن است به شما اجازه دهند زبانی را که می‌خواهید برنامه فراخوانده‌شده به آن زبان باشد مشخص کنید. یک نمونه از آن ویژگی EXTRA_LANGUAGE از Speech Recognizer API است.

سرصفحه Accept-Language را برای برگه سفارشی Chrome درنظر بگیرید

هنگام فراخوانی برگه سفارشی Chrome، افزودن سرصفحه Accept-Language را ازطریق Browser.EXTRA_HEADERS برای باز کردن صفحه وب به زبان برنامه‌تان درنظر بگیرید.

اگر اولویت‌های زبان هر برنامه را در تنظیمات سیستم بردارید، منطقه زبانی برنامه‌تان را به منطقه زبانی سیستم بازنشانی کنید

اگر اولویت‌های زبان برنامه‌تان را از تنظیمات سیستم بردارید (با برداشتن android:localeConfig از AndroidManifest.xml برنامه‌تان)، کاربران نمی‌توانند به‌راحتی زبان برنامه را به پیش‌فرض سیستم بازنشانی کنند.

به همین دلیل، اگر android:localeConfig را برمی‌دارید، بازنشانی کردن زبان برنامه به زبان سیستم را بااستفاده از LocaleListCompat.getEmptyLocaleList یا LocaleList.getEmptyLocaleList (همان‌طور که در قطعه کد زیر دیده می‌شود) مدنظر قرار دهید:

// Use the AndroidX APIs to reset to the system locale for backward and forward compatibility
AppCompatDelegate.setApplicationLocales(
  LocaleListCompat.getEmptyLocaleList()
)

// Or use the Framework APIs for Android 13 and above to reset to the system locale
val context = LocalContext.current
context.getSystemService(LocaleManager::class.java)
  .applicationLocales = LocaleList.getEmptyLocaleList()

نمونه فایل locale_config.xml

به‌طور پیش‌فرض، Android شامل ترجمه‌های سطح سیستم در پروژه منبع باز Android (AOSP) برای مجموعه‌ای استاندارد از پرکاربردترین زبان‌های محلی است. نمونه فایل locale_config.xml که در این بخش گنجانده شده است، قالب پیشنهادی را برای هریک از این زبان‌ها نشان می‌دهد. برای کمک به ساختن فایل locale_config.xml خودتان برای مجموعه زبان‌هایی که برنامه‌تان پشتیبانی می‌کند، به این فایل نمونه مراجعه کنید.

<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
   <locale android:name="af"/> <!-- Afrikaans -->
   <locale android:name="am"/> <!-- Amharic -->
   <locale android:name="ar"/> <!-- Arabic -->
   <locale android:name="as"/> <!-- Assamese -->
   <locale android:name="az"/> <!-- Azerbaijani -->
   <locale android:name="be"/> <!-- Belarusian -->
   <locale android:name="bg"/> <!-- Bulgarian -->
   <locale android:name="bn"/> <!-- Bengali -->
   <locale android:name="bs"/> <!-- Bosnian -->
   <locale android:name="ca"/> <!-- Catalan -->
   <locale android:name="cs"/> <!-- Czech -->
   <locale android:name="da"/> <!-- Danish -->
   <locale android:name="de"/> <!-- German -->
   <locale android:name="el"/> <!-- Greek -->
   <locale android:name="en-AU"/> <!-- English (Australia) -->
   <locale android:name="en-CA"/> <!-- English (Canada) -->
   <locale android:name="en-GB"/> <!-- English (United Kingdom) -->
   <locale android:name="en-IN"/> <!-- English (India) -->
   <locale android:name="en-US"/> <!-- English (United States) -->
   <locale android:name="es"/> <!-- Spanish (Spain) -->
   <locale android:name="es-US"/> <!-- Spanish (United States) -->
   <locale android:name="et"/> <!-- Estonian -->
   <locale android:name="eu"/> <!-- Basque -->
   <locale android:name="fa"/> <!-- Farsi -->
   <locale android:name="fi"/> <!-- Finnish -->
   <locale android:name="fil"/> <!-- Filipino -->
   <locale android:name="fr"/> <!-- French (France) -->
   <locale android:name="fr-CA"/> <!-- French (Canada) -->
   <locale android:name="gl"/> <!-- Galician -->
   <locale android:name="gu"/> <!-- Gujarati -->
   <locale android:name="hi"/> <!-- Hindi -->
   <locale android:name="hr"/> <!-- Croatian -->
   <locale android:name="hu"/> <!-- Hungarian -->
   <locale android:name="hy"/> <!-- Armenian -->
   <locale android:name="in"/> <!-- Indonesian -->
   <locale android:name="is"/> <!-- Icelandic -->
   <locale android:name="it"/> <!-- Italian -->
   <locale android:name="iw"/> <!-- Hebrew -->
   <locale android:name="ja"/> <!-- Japanese -->
   <locale android:name="ka"/> <!-- Georgian -->
   <locale android:name="kk"/> <!-- Kazakh -->
   <locale android:name="km"/> <!-- Khmer -->
   <locale android:name="kn"/> <!-- Kannada -->
   <locale android:name="ko"/> <!-- Korean -->
   <locale android:name="ky"/> <!-- Kyrgyz -->
   <locale android:name="lo"/> <!-- Lao -->
   <locale android:name="lt"/> <!-- Lithuanian -->
   <locale android:name="lv"/> <!-- Latvian -->
   <locale android:name="mk"/> <!-- Macedonian -->
   <locale android:name="ml"/> <!-- Malayalam -->
   <locale android:name="mn"/> <!-- Mongolian -->
   <locale android:name="mr"/> <!-- Marathi -->
   <locale android:name="ms"/> <!-- Malay -->
   <locale android:name="my"/> <!-- Burmese -->
   <locale android:name="nb"/> <!-- Norwegian -->
   <locale android:name="ne"/> <!-- Nepali -->
   <locale android:name="nl"/> <!-- Dutch -->
   <locale android:name="or"/> <!-- Odia -->
   <locale android:name="pa"/> <!-- Punjabi -->
   <locale android:name="pl"/> <!-- Polish -->
   <locale android:name="pt-BR"/> <!-- Portuguese (Brazil) -->
   <locale android:name="pt-PT"/> <!-- Portuguese (Portugal) -->
   <locale android:name="ro"/> <!-- Romanian -->
   <locale android:name="ru"/> <!-- Russian -->
   <locale android:name="si"/> <!-- Sinhala -->
   <locale android:name="sk"/> <!-- Slovak -->
   <locale android:name="sl"/> <!-- Slovenian -->
   <locale android:name="sq"/> <!-- Albanian -->
   <locale android:name="sr"/> <!-- Serbian (Cyrillic) -->
   <locale android:name="sr-Latn"/> <!-- Serbian (Latin) -->
   <locale android:name="sv"/> <!-- Swedish -->
   <locale android:name="sw"/> <!-- Swahili -->
   <locale android:name="ta"/> <!-- Tamil -->
   <locale android:name="te"/> <!-- Telugu -->
   <locale android:name="th"/> <!-- Thai -->
   <locale android:name="tr"/> <!-- Turkish -->
   <locale android:name="uk"/> <!-- Ukrainian -->
   <locale android:name="ur"/> <!-- Urdu -->
   <locale android:name="uz"/> <!-- Uzbek -->
   <locale android:name="vi"/> <!-- Vietnamese -->
   <locale android:name="zh-Hans"/> <!-- Chinese (Simplified) -->
   <locale android:name="zh-Hant"/> <!-- Chinese (Traditional) -->
   <locale android:name="zu"/> <!-- Zulu -->
</locale-config>

منابع بیشتر

برای اطلاعات بیشتر، نمونه‌های کد، مقاله‌های وبلاگ، و ویدیوهای ما را ببینید.