我在Android java中遇到了問題,我希望在不同的語言中使用不同的詞彙表。
該應用程序由德國和瑞典的軍隊和警察部隊使用。 當然,德國人需要德語的應用程序,而瑞典人需要瑞典語,這當然是通過將字符串資源放在res/values-de/strings.xml和res/values-sv/strings.xml和是通過Android設備中的不同設置選擇的(請參閱Resource handling)。
但是我的問題是,警察部隊使用不同於軍事力量的詞彙,我想以某種方式反映資源。
有沒有什麼辦法可以通過res/values-de-mil/strings.xml或其他任何簡單的方式擁有不同的詞彙資源,我可以在應用f.ex中設置。Android中的自定義資源(不同詞彙)
回答
我不認爲這是可能的。
一個選項是將用戶的偏好設置爲共享首選項(您可以要求在用戶第一次打開應用程序時)以及如果是警察或軍隊存儲。
然後你可以使用反射來加載你的字符串資源。
<string name="string_policeMan">Word for a policeman</string>
<string name="string_military">Word for a military</string>
SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
boolean isPoliceMan = shared.getBoolean(policeMan, false);
int resId;
if(isPoliceMan)
resId = R.string.class.getField("string_policeMan").getInt(null);
else
resId = R.string.class.getField("string_military").getInt(null);
String field = context.getResources().getString(resId);
據我知道它不可能有RES /值-DE-MIL由於Android系統並不知道用戶是誰。你可以做到這一點有2套字符串。 對於egyou有
<string name="Name">...</string>
使其作爲
<string name="mil_Name">...</string>
<string name="cop_Name">...</string>
現在,如果你知道用戶是軍方則getResources().getString(R.string.mil_Name);
也看起來像一個可行的想法,非常感謝提示答案 –
實際上存在一種方式來做到這一點,即(ab)使用數量字符串。只是出於學術目的,我會給你一個下面的概念證明,但作爲前面的警告:知道這種方法確實不歸納爲任何區域設置。不過,對於德語和瑞典語,你應該沒問題。
對於數量字符串(或複數,因爲他們通常被稱爲Android資源)背後的理論,請有一個read here。它也解釋了爲什麼下面概述的方法沒有推廣到任何語言環境。我會假設這一切都會有意義,所以讓我們快速轉向概念驗證。
值-DE/plurals.xml
<resources>
<plurals name="hello_im_in_the">
<item quantity="one">Hallo, ich bin in der Armee.</item>
<item quantity="other">Hallo, ich bin auf der Polizei.</item>
</plurals>
</resources>
值-SV /複數。XML
<resources>
<plurals name="hello_im_in_the">
<item quantity="one">Hej, jag är på militären.</item>
<item quantity="other">Hej, jag är på polisen.</item>
</plurals>
</resources>
讓我們在活動中使用上面的資源有四個TextView
S:兩個用於各個地區,一個爲每一個「力」(警察與軍隊即是)。
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.res_activity_layout);
int policeForceQuantity = 0;
int militaryQuantity = 1;
TextView militaryTextViewDe = (TextView) findViewById(R.id.military_de);
TextView policeForceTextViewDe = (TextView) findViewById(R.id.police_force_de);
Configuration config = new Configuration(getResources().getConfiguration());
config.locale = Locale.GERMAN;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
String militaryText = getResources().getQuantityString(R.plurals.hello_im_in_the, militaryQuantity);
String policeForceText = getResources().getQuantityString(R.plurals.hello_im_in_the, policeForceQuantity);
militaryTextViewDe.setText(militaryText);
policeForceTextViewDe.setText(policeForceText);
TextView militaryTextViewSv = (TextView) findViewById(R.id.military_sv);
TextView policeForceTextViewSv = (TextView) findViewById(R.id.police_force_sv);
config = new Configuration(getResources().getConfiguration());
config.locale = new Locale("sv");
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
militaryText = getResources().getQuantityString(R.plurals.hello_im_in_the, militaryQuantity);
policeForceText = getResources().getQuantityString(R.plurals.hello_im_in_the, policeForceQuantity);
militaryTextViewSv.setText(militaryText);
policeForceTextViewSv.setText(policeForceText);
}
所有以上所做的是使用的1
一定量的「選擇」軍事短語,以及任何其他值(0
在該示例中),用於特定於波利奇力的短語。爲了舉例,我只是在運行時更改語言環境,因此我們可以並排查看結果,而無需真正進入設備的語言環境設置。
結果:
換句話說,這表明我們能夠成功地採取Android的語言環境系統的優勢,並使用預定義的數量來選擇軍事短語或警察部隊短語顯示。
並不漂亮,絕對不是數量字符串的意圖,但它會在您的特定用例中完成工作。
這是一個有趣的解決方案,但你說有點骯髒。問題是,應用程序可能會翻譯成其他語言,但無論如何,我可能能夠使用它。謝謝 –
- 1. Android Espresso與自定義資源同步
- 2. 自定義詞彙表
- 3. 如何找到不同語言詞彙列表的資源?
- 4. 自定義資源名稱Android
- 5. Android:自定義CursorAdapter替代資源
- 6. iOS Siri添加自定義詞彙
- 7. 製作自定義詞彙表
- 8. Wordpress自定義詞彙多語言
- 9. Scikits學習:使用自定義的詞彙連同管道
- 10. PostgreSQL + GROUP_P的詞彙定義
- 11. Android重新定義資源
- 12. 資源自定義字段
- 13. EAR中的自定義資源
- 14. SCIM協議中的自定義資源
- 15. asp.net自定義資源提供使用詞典/ SortedList/SortedDictionary?
- 16. 需要自定義同義詞替換文本中的單詞
- 17. Gradle:排除彙編中不同的資源文件
- 18. 用於Windows中語音識別的自定義詞彙表
- 19. 「新聞」資源的自定義路由
- 20. 的Tomcat 6自定義屬性資源
- 21. 主動資源的自定義參數
- 22. websend.avi作爲TAnimate的自定義資源?
- 23. 自定義詞彙表的自動網站工具提示?
- 24. 在Android中存儲靜態數據 - 自定義資源?
- 25. Android從元數據中讀取自定義xml資源
- 26. 如何在匯合管道中配置自定義資源類型?
- 27. 在WPF應用程序中定義資源的不同方法
- 28. 自定義同義詞支持lucene
- 29. AnyLogic項目中的資源集合中的自定義資源選擇
- 30. SolrCloud從資源中加載同義詞文件
看起來像一個可行的想法,感謝您的及時答案 –