最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android應用設(shè)置獨立的多語言實戰(zhàn)技巧詳解

 更新時間:2023年12月05日 11:26:48   作者:alexhilton  
這篇文章主要為大家介紹了Android應用設(shè)置獨立的多語言實戰(zhàn)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

應用設(shè)置一個不同于全局的多語言

通常情況下多語言的設(shè)置都在系統(tǒng)設(shè)置中,應用需要做的就是提供本應用所使用的字串的多語言翻譯,使用時使用R.string.app_name類似的引用,然后系統(tǒng)會根據(jù)用戶在系統(tǒng)設(shè)置中的選項來選擇合適的具體的語言。并且這是一個全局選項,也就是說選擇一個多語言后整個手機都變了。但有些時候,應用想要自己能夠設(shè)置一個獨自的多語言,也就是說想要給自己的應用設(shè)置一個不同于全局的多語言。今天就來研究一下這個話題。

這樣做的目的是為了提供更好的用戶體驗,因為一些僅支持某些特定語言的應用,可能會與系統(tǒng)全局選項沖突,或者只在某些固定地區(qū)發(fā)行的應用,單獨的個性化的局部設(shè)置會更好一些。這個谷歌已經(jīng)通過Jetpack中的appcomat庫給與了比較好的支持,詳細的可以參考這個文檔,以及官方的Sample。我們在官方文檔基礎(chǔ)之上再疊加試驗和理解,做進一步的總結(jié)。

主要分為兩種方法,一是系統(tǒng)支持單獨給應用設(shè)置多語言;二是應用中獨自設(shè)置,這個也是更為通用的解法。

注意:這里的方法都是讓某一個應用內(nèi)部使用的多語言改變?yōu)橄鄳脑O(shè)置(一般情況下是與系統(tǒng)全局設(shè)置不一樣的),但是需要注意僅僅局限于應用啟動后的應用內(nèi)部界面使用的語言。對于像桌面上應用的入口仍是系統(tǒng)全局設(shè)置為準,因為這個入口并不屬于應用自己管轄范圍內(nèi)的。

系統(tǒng)設(shè)置中支持為應用設(shè)置單獨多語言

谷歌官方的表述是從Android 13(Android T, SDK 33)開始,就支持了在系統(tǒng)中有一個入口,可以為每個應用單獨設(shè)置多語言選項。這一部分里面描述的方法也都是支持這個系統(tǒng)入口的情況才能生效的。需要注意,雖然谷歌官方說從Android 13開始就支持了,但這個也要取決 于廠商的定制,目前看大部分國內(nèi)廠商會把這個功能和入口給屏蔽掉,那么這里后面描述的方法也就都不會生效了。

入口在哪里

需要通過系統(tǒng)設(shè)置來進行,有兩個入口:

  • Settings(設(shè)置)> Additional Settings (更多設(shè)置) > Languages & Input (語言和輸入) > (App Languages) 應用語言 > select an app(選擇一個應用)
  • Settings(設(shè)置)> Apps (應用)> select an app(選擇一個應用) > Language(語言)

具體的方法,又分為兩種,一是自動式的,二是手動式的。

自動添加

說是自動,其實也是利用IDE(即Android Studio)和編譯打包時自動根據(jù)res下面的多語言生成一份配置而已。在build.gradle或者build.gradle.kts中的android下面添加generateLocaleConfig = true:

android {
        androidResources {
            generateLocaleConfig = true
        }
    }

然后在resl中增加一個名為resources.properties的文件,加入默認值配置:

unqualifiedResLocale=en-US

手動添加

在res/xml中增加文件locales_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>

然后在AndroidManifest.xml中的appllication加上這一個屬性:

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

因為還沒有找到支持如此設(shè)置的手機,所以上述方法未經(jīng)驗證。

在應用內(nèi)部設(shè)置多語言

這個是更為通用的做法,具體的UI就是可以隨便弄了,弄個List或者DrowDownMenu都可以。重點是讓設(shè)置生效的時候需要用到一個API,叫做setApplicationLocales())和getApplicationLocales())。并且在appcompat 1.6.0以后的版本,有比較方便的API可以直接使用。

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

如果要還原使用系統(tǒng)設(shè)置中的全局多語言配置,可以用LocaleListCompat.getEmptyLocaleList()當作參數(shù)。

特別注意:此方法要想生效,宿主Activity必須是繼承自appcompat中的AppCompatActivity,而不是其他 。

為了兼容以前的版本(Android 12,API level 32以前),還需要在AndroidManifest中添加一個額外的Service:

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

需要注意,這個Service在appcomat庫中已經(jīng)定義好了,只需要在manfiest里添加一下就可以了。

另外需要注意的是,一般情況下,應用自己肯定 會保存一下當前用戶所選擇的語言。但如果系統(tǒng)也支持應用語言選擇入口的話,那么通過系統(tǒng)入口也是可能會修改應用的多語文選項的,這時,就需要把系統(tǒng)的選項與應用內(nèi)部的選項進行同步??梢酝ㄟ^AppCompatDelegate.getApplicationLocales)來獲取當前生效的語言選項,它是由appcompat庫來維護的,肯定是最新的,所以應用自己保存的選項如果與這個API的結(jié)果不一致,就要重置為這個API的結(jié)果。

參考資料

以上就是Android應用設(shè)置獨立的多語言實戰(zhàn)技巧詳解的詳細內(nèi)容,更多關(guān)于Android設(shè)置獨立的多語言的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

台中市| 赫章县| 枣阳市| 博客| 诸城市| 铅山县| 壶关县| 大港区| 达州市| 通州市| 绥棱县| 闵行区| 库伦旗| 建湖县| 北海市| 衡阳县| 贺兰县| 玉山县| 翼城县| 葫芦岛市| 临沂市| 陆良县| 报价| 响水县| 岳普湖县| 齐齐哈尔市| 抚宁县| 台州市| 嘉禾县| 桃园市| 黄梅县| 青州市| 梅河口市| 金平| 斗六市| 南江县| 和平区| 资源县| 开封县| 宝坻区| 柳河县|