6

英語、ドイツ語、ポーランド語の 3 か国語に翻訳されたアプリがあります

したがって、プロジェクト内の言語用に次の 3 つのフォルダーがあります。

values
strings.xml

values-en
strings.xml

values-de
strings.xml

values-pl
strings.xml

すべての文字列を値フォルダーに入れ、ポーランド語バージョンでいくつかの文字列が欠落している場合、ポーランド語バージョンで欠落している文字列にアクセスするとアプリがクラッシュすることに気付きました。

values-pl フォルダーに文字列が見つからない場合、システムはデフォルト値フォルダーから文字列を取得するだけだと思っていました。

これらの潜在的な不足している文字列のクラッシュをキャッチする方法はありますか? コンパイラで、任意の言語の文字列が欠落しているという警告が表示されたとしても、問題はありませんか?

編集と追加

実際、デフォルトでも別の文字列が欠落していました....回答/コメントに感謝します!

ただし、デフォルトのstrings.xmlファイルのみに文字列が欠落しているが、他のすべてのファイルには存在する場合もテストしました。警告も何も表示されません。

したがって、この場合、すべての文字列が de、en、pl に存在するが、デフォルトで 1 つが欠落している場合、たとえば中国でアプリがクラッシュします (デフォルトが欠落しているため、もちろん理解しています)。

しかし、私を悩ませているのは、コードで参照されているすべての文字列の完全性をチェックする方法が見つからないことです。これは、不足している文字列にアクセスする方法です。

context.getString(R.string.MYTRING_abc),
4

3 に答える 3

3

ボックス内のエラーに設定さWindow --> Properties --> Android --> Lint Error CheckingれたCorrectness:MessagesセクションのEclipseメニュー。デフォルト値 string.xml でコンパイルすると、翻訳されていない各文字列がマークされます。ほとんどの場合、ビルド後にこれらのエラーを表示するには、ウィンドウ内 ( の横) をクリックする必要があります。 それらを修正した後にエラーが発生した場合は、プロジェクトをクリーンアップする必要があります。そうしないと、Eclipse がビルドされず、これらのエラーが引き続き表示されます。MissingTranslationSeverityrefresh iconLink WarningsOutline window

于 2013-04-25T22:37:01.157 に答える
2

values-pl フォルダーに文字列が見つからない場合、システムはデフォルト値フォルダーから文字列を取得するだけだと思っていました。

sに対してはそのように機能しますが、s<string>の要素に対してはそうではありません<string-array>。翻訳の 1 つに<string-array>正しい数の要素がない場合、アプリが不足している要素にアクセスしようとすると、クラッシュが発生します。過去数年間の私の解決策は、すべての文字列配列を翻訳されていない XML ファイルに格納し、翻訳可能な文字列を参照することでした。

res/values/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>

このように、独立した文字列の 1 つが翻訳されていない場合でも、配列は引き続き有効であり、その特定の値のデフォルトの翻訳にフォールバックします。

もちろん、他の可能性は、コメントで示唆されているように、すべての文字列のデフォルトの翻訳がないことですres/values/

于 2013-04-25T22:51:55.347 に答える