關(guān)于 Android 7.0 以上的字符串資源匹配宦言,官方文檔: https://developer.android.com/guide/topics/resources/multilingual-support?hl=zh-cn 介紹如下:
筆者實(shí)測(cè)結(jié)果與官方介紹卻有些出入。
筆者定義了一個(gè)字符串今妄,在 values
俏脊,values-en
缩宜,values-en-rUS
褒颈,values-en-rCA
,values-ja
文件夾中均做了翻譯:
在 Android 9.0
的設(shè)備上測(cè)試颓帝,設(shè)備的語(yǔ)言是 en-US
米碰,項(xiàng)目的設(shè)置是 minSdkVersion 26
+ targetSdkVersion 30
- 使用此字符串時(shí),正確顯示了
values-en-rUS
中的內(nèi)容English-US
购城。 - 刪掉
values-en-rUS
中的翻譯后吕座,正確顯示了values-en
中的內(nèi)容English
。 - 刪掉
values-en
中的翻譯后瘪板,按照官方介紹米诉,應(yīng)該顯示values-en-rCA
中的內(nèi)容,但實(shí)際顯示了values
中的內(nèi)容Default
篷帅。 - 刪掉
values
中的內(nèi)容后史侣,編譯期直接報(bào)錯(cuò):AAPT: error: resource string/test (aka com.example.myapplication:string/test) not found
(在xml
中使用時(shí)報(bào)的錯(cuò))或Unresolved reference: test
(在代碼中使用時(shí)報(bào)的錯(cuò))。
根據(jù)實(shí)測(cè)結(jié)果魏身,Android 9.0 上感覺(jué)還是采用的官方文檔中介紹的 Android 7.0 以前的字符串匹配策略:
但我注意到官方文檔中有這樣一段話:
Android 7.0(API 級(jí)別 24)可提供更穩(wěn)健的資源解析惊橱,并自動(dòng)查找更好的備用方法。不過(guò)箭昵,為了加速解析和提升可維護(hù)性税朴,您應(yīng)以最常用的母語(yǔ)存儲(chǔ)資源。例如家制,如果您之前將西班牙語(yǔ)資源存儲(chǔ)在 values-es-rUS 目錄中正林,請(qǐng)將其移至包含拉丁美洲西班牙語(yǔ)的 values-b+es+419 目錄中。同樣颤殴,如果您在名為 values-en-rGB 的目錄中存儲(chǔ)有資源字符串觅廓,請(qǐng)將此目錄重命名為 values-b+en+001(國(guó)際英語(yǔ)),因?yàn)?en-GB 字符串的最常用母語(yǔ)為 en-001涵但。
這讓我不確定是否是文件夾命名問(wèn)題導(dǎo)致的杈绸,但我暫不太理解 values-b+es+419
,values-b+en+001
這樣的命名規(guī)則和含義在哪里有介紹矮瘟,如果讀者知曉瞳脓,望不吝賜教。
目前找到的資料是 419
來(lái)自于 維基百科-UN M49澈侠,代表 Americas
劫侧。參考 StackOverflow
但我創(chuàng)建 values-b+en+419
后沒(méi)有效果, 創(chuàng)建 values-en-r419
時(shí)提示 Invalid resource directory name
哨啃。