2011-03-01 114 views
8

我正在翻譯應用程序。看看this,我可以看到很多國家都有幾種語言的代碼。Android本地化問題

我試着製作一個名爲values-nb的文件夾,用於挪威語Bokmål。我將手機上的語言環境更改爲挪威語。這在我的Sony Ericson Xperia 8上工作,但不在三星Galaxy Tab上。

然後我嘗試將文件夾重命名爲values-no。它現在在星系選項卡上工作,但不在xperia上。我創建了這兩個文件夾,它的工作原理。但是,然後我必須將相同的文件放在每個文件夾中!

如果有人選擇了挪威的Nynorsk,我會不得不創建另一個文件夾,以便他們不會默認英文,但會得到挪威語文本?值-NN?

我想我的問題是這樣的: 我如何得到這個工作?我可以製作所有這些文件夾,然後讓它們參考值 - 不是嗎?請幫助:)

+0

我真的不能相信這是很難支持單一語言。感謝您發佈您的問題! – DiscDev 2015-07-24 22:17:08

回答

9

根據目前的搜索規則,沒有辦法只針對特定國家進行本地化並能夠搜​​索所有語言。至少這是通過閱讀http://developer.android.com/guide/topics/resources/localization.html頁面的理解,您需要創建值-nn-rNO,values-nb-rNO和values-no-rNO並且具有重複的strings.xml條目。

我沒有試過,但考慮串別名爲http://developer.android.com/guide/topics/resources/providing-resources.html#AliasResources

+0

這很糟糕。這也是我從他們那裏得到的。我查看了字符串別名,但根據我的理解,它並不能真正解決任何問題。我將有幾個文件有很多別名,這些文件仍佔用一些空間。 :( – AmITheRWord 2011-03-01 22:14:46

+1

有沒有人試圖改變應用程序中的語言環境來解決這個問題?如果nn或nb,設置爲no?[link](http://stackoverflow.com/questions/2900023/change-language-programatically-in-android ) – Cremons 2012-10-15 16:43:43

+1

當「en_CA」是「en」的子語言和「sv_FI」的子語言是「sv」的子語言時,fark是「nn」還是不是「子」的子語?看起來有人在某段時間之後搞笑了,現在系統不能改變以保證向後兼容性,否則Ivar Aasen拒絕Nynorsk成爲下屬Norsk – Nilzor 2015-05-29 11:39:47

9

我知道這是一個古老的一個,但繼承人一招不行,Nb和NN相結合,因爲沒有:

Locale locale = getResources().getConfiguration().locale; 
if (locale.getLanguage().equals("no") || locale.getLanguage().equals("nb") || locale.getLanguage().equals("nn")){ 
    locale = new Locale("no","NO"); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    Resources res = getBaseContext().getResources(); 
    res.updateConfiguration(config, res.getDisplayMetrics()); 
} 
+0

一個很好的解決方案,如果你控制整個堆棧但不是如果你正在開發一個庫 – Nilzor 2015-05-29 11:44:24

+2

酷招,但是你應該使用res.getConfiguration()而不是創建一個新的配置對象。不想丟失其他配置數據(字體縮放等) – Chicowitz 2015-09-01 21:58:40

0

不是原始問題的答案,而是針對相關問題的解決方案,如果您爲該問題搜索解決方案(這適用於我),則這是一個可能的目標。

在我們的項目中,我們創建了資源目錄,但由於某些原因,本地化字符串被忽略。

問題在於Android支持生成僞自定義資源。在舊版Android的你這個魔術在的build.gradle文件中做到了:

android.applicationVariants.all { variant -> 
    // see http://blog.danlew.net/2014/04/16/android-localization-tips/ 
    if (variant.buildType.isDebuggable()) { 
     variant.mergedFlavor.addResourceConfiguration("zz_ZZ") 
    } 
} 

這在Android中的更高版本已經改變,如果你使用,你不會得到任何本地化。新的方式只是:

buildTypes { 
    debug { 
     pseudoLocalesEnabled true 
    } 
}