2013-04-25 131 views
5

我有翻譯成3種語言的應用程序:英語,德語,波蘭語如何避免由於缺少字符串條目而導致的崩潰?

所以,我對於該項目的語言這三個文件夾:

values 
strings.xml 

values-en 
strings.xml 

values-de 
strings.xml 

values-pl 
strings.xml 

我已經意識到,如果我把所有字符串成值文件夾,並在波蘭語版本中缺少一些字符串,導致應用程序在訪問波蘭語版本中缺少的字符串時崩潰。

我原以爲系統只是從默認值文件夾中獲取字符串,如果它沒有在values-pl文件夾中找到它的話。

有什麼辦法可以捕捉到這些潛在的缺失字符串崩潰? EVen如果我可以在編譯器中得到一個警告,說明任何語言的字符串都丟失了,那麼可以嗎?

編輯和添加

其實另一個字符串缺少默認太....所以謝謝你的答案/評論!

但是現在我也測試了在默認的strings.xml文件中只有一個字符串缺少的情況,但是隻存在於所有其他文件中。我沒有得到任何警告或任何其他。

因此,在這種情況下,如果所有的字符串存在於德語,英語,PL但一個是在默認情況下丟失,那麼在中國的應用程序崩潰,例如(我當然明白的,因爲默認的缺失)。

但是困擾我的是我沒有找到任何方法來檢查代碼中所有引用字符串的完整性。這是我訪問缺失的字符串:

context.getString(R.string.MYTRING_abc), 
+0

從我expiriens如果有遺漏串項目不編譯。我正在使用eclipse juno。 – NickF 2013-04-25 19:54:43

+0

如果你測試你的應用程序,用所有可用的語言,你不會問這個問題。對我來說,這是沒有道理的,爲什麼你只是不確定,在發佈你的應用程序之前,字符串是可用的。並非所有的例外都應該被捕捉,應該在它們發生之前處理。 – Darwind 2013-04-25 20:00:12

+1

「我的應用程序已翻譯成3種語言:英語,德語,波蘭語」 - 不,您的應用翻譯成四種語言:英語,德語,波蘭語,以及您的'res/values /'目錄中的任何語言。如果你真的只把你的應用翻譯成三種語言,那麼其中一種語言需要轉移到'res/values /'中。你希望'res/values /'對於每一個字符串資源都有默認值,無論你希望認爲你的默認語言是什麼。 – CommonsWare 2013-04-25 20:10:47

回答

3

在Eclipse菜單Window --> Properties --> Android --> Lint Error CheckingCorrectness:Messages部分設置MissingTranslationSeverity框中錯誤。當以默認值編譯string.xml時,每個未翻譯的字符串都將被標記。 大部分時間構建後,您必須單擊Link Warnings窗口(Outline window旁邊的refresh icon)纔會顯示這些錯誤。
如果在修復它們之後出現錯誤,則必須清理項目,否則Eclipse將不會生成並仍顯示這些錯誤。

+0

謝謝,我已經檢查了 - 我的設置是致命 – user387184 2013-04-26 09:34:01

2

我本來期望的是,系統只是獲取字符串的默認值文件夾,如果它不值-PL文件夾中找到它。

它適用於<string> s,但不適用於<string-array> s的元素。如果其中一個翻譯的<string-array>沒有正確數量的元素,那麼如果應用嘗試訪問缺少的元素,則會發生崩潰。我過去幾年的解決方案是將每個字符串數組存儲在非翻譯的XML文件中,並引用可翻譯的字符串。

RES /價值/ misc.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Resources that are neither styles nor strings to be translated. --> 
<resources> 
    <string-array name="notification_line_content_entries"> 
    <item>@string/time_remaining</item> 
    <item>@string/time_since_status_change</item> 
    <item>@string/vital_signs</item> 
    </string-array> 
</resources> 

這樣,如果獨立字符串中的一個不翻譯,陣列仍然有效,並且你回退到默認的轉換爲特定的值。

當然,另一種可能性是,作爲在評論中建議,你不必在res/values/每個字符串默認翻譯。

+0

感謝,它只是一個普通的字符串,它缺少的值目錄中,但沒有警告或其他任何東西! – user387184 2013-04-26 09:34:56

0

Android Studio中

Settings -> Editor -> Inspections -> (search for or find) Incomplete translation 

設置爲infowarningError阻止在按create signed APK時創建應用程序。

根據我自己的經驗,當創建構建時(通過USB調試進行非調試,意味着它是簽名構建時),但將不完整的轉換更改爲warning(因此我收到通知沒有完成,但它不會被忽略(如果我忘記了)(或者info就可以),它允許應用程序被構建,它的功能就像在調試中一樣,其中不完整的翻譯將轉換爲默認值。

但是,如果你在調試遇到的錯誤爲好,這仍然應該工作,防止APK創建崩潰

相關問題