欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android應(yīng)用設(shè)置獨(dú)立的多語(yǔ)言實(shí)戰(zhàn)技巧詳解

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

應(yīng)用設(shè)置一個(gè)不同于全局的多語(yǔ)言

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

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

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

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

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

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

入口在哪里

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

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

具體的方法,又分為兩種,一是自動(dòng)式的,二是手動(dòng)式的。

自動(dòng)添加

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

android {
        androidResources {
            generateLocaleConfig = true
        }
    }

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

unqualifiedResLocale=en-US

手動(dòng)添加

在res/xml中增加文件locales_config.xml,加入需要支持的多語(yǔ)言選項(xiàng),如:

<?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加上這一個(gè)屬性:

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

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

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

這個(gè)是更為通用的做法,具體的UI就是可以隨便弄了,弄個(gè)List或者DrowDownMenu都可以。重點(diǎn)是讓設(shè)置生效的時(shí)候需要用到一個(gè)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è)置中的全局多語(yǔ)言配置,可以用LocaleListCompat.getEmptyLocaleList()當(dāng)作參數(shù)。

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

為了兼容以前的版本(Android 12,API level 32以前),還需要在AndroidManifest中添加一個(gè)額外的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>

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

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

參考資料

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

相關(guān)文章

  • Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法

    Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法

    本篇文章小編為大家介紹,Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法。需要的朋友參考下
    2013-04-04
  • Android實(shí)現(xiàn)觸摸移動(dòng)的懸浮窗口功能

    Android實(shí)現(xiàn)觸摸移動(dòng)的懸浮窗口功能

    這篇文章主要介紹了Android實(shí)現(xiàn)觸摸移動(dòng)的懸浮窗口功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Android實(shí)現(xiàn)QQ登錄界面遇到問題及解決方法

    Android實(shí)現(xiàn)QQ登錄界面遇到問題及解決方法

    本文給大家介紹android仿qq登錄界面的實(shí)現(xiàn)代碼,在實(shí)現(xiàn)此功能過程中遇到各種問題,但是最終都順利解決,如果大家對(duì)android qq登錄界面實(shí)現(xiàn)方法感興趣的朋友一起學(xué)習(xí)吧
    2016-09-09
  • 詳解LeakCanary分析內(nèi)存泄露如何實(shí)現(xiàn)

    詳解LeakCanary分析內(nèi)存泄露如何實(shí)現(xiàn)

    這篇文章主要為大家介紹了詳解LeakCanary分析內(nèi)存泄露如何實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 第三方開源Android TickPlusDrawable狀態(tài)可以通過動(dòng)畫切換的按鈕

    第三方開源Android TickPlusDrawable狀態(tài)可以通過動(dòng)畫切換的按鈕

    Android tickplusdrawable(TickPlusDrawable)是一個(gè)狀態(tài)可以通過動(dòng)畫切換的按鈕,本文給大家分享第三方開源Android TickPlusDrawable狀態(tài)可以通過動(dòng)畫切換的按鈕,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • go語(yǔ)言之美迅速打rpm包實(shí)現(xiàn)詳解

    go語(yǔ)言之美迅速打rpm包實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了go語(yǔ)言之美迅速打rpm包實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Android自定義View新年煙花、祝福語(yǔ)橫幅動(dòng)畫

    Android自定義View新年煙花、祝福語(yǔ)橫幅動(dòng)畫

    這篇文章主要為大家詳細(xì)介紹了Android自定義View新年煙花、祝福語(yǔ)橫幅動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳談Android中Matrix的set、pre、post的區(qū)別

    詳談Android中Matrix的set、pre、post的區(qū)別

    下面小編就為大家?guī)硪黄斦凙ndroid中Matrix的set、pre、post的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Android四大組件之broadcast廣播詳解

    Android四大組件之broadcast廣播詳解

    Android開發(fā)的四大組件分別是:活動(dòng)(activity),用于表現(xiàn)功能;服務(wù)(service),后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn);廣播接受者(Broadcast Receive),勇于接收廣播;內(nèi)容提供者(Content Provider),支持多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù),本篇著重介紹廣播組件
    2022-10-10
  • Flutter生命周期超詳細(xì)講解

    Flutter生命周期超詳細(xì)講解

    這篇文章主要為大家介紹了Flutter生命周期和App生命周期示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論