2016-12-21 11 views
0

を変更すると、ここで非常に奇妙なものだと私ははっきりと何が起こっているかを理解していないが、多分あなたの1は私の脳の内部に光を向けることができます...異なる共通のモジュールを使用して異なる言語の特定の文字列(アンドロイド)

私が持っています別のアプリケーションで使用される複数の共通ファイル(複数の言語)とAndroidStudio上のプロジェクト:

|Common core 
|- default module 1 
|- default module 2 
|- default images 
|- | default strings 
    |- danish (default) in "values" folder 
    |- english in "values-en" folder 
    |- swedish in "values-sv" folder 
|App one 
|- specific module 3 
|- specific module 4 
|- specific images 
|- | specific strings 
    |- in "values" folder 
|App two 
... 

FYIは、私のアプリケーションでは、私はと呼ばれる最初のファイルであるAppApplication.javaファイルを持っています〜で私のアプリケーションをセットアップするために使用される、メニュー設定、いくつかの詳細な変数、言語設定などがあります。

ここで、共通コアのデフォルトモジュールを使用するApp 1(ex。)をコンパイルするときに、デフォルトモジュールから文字列や画像を変更したい場合は、 images/strings appフォルダーに共通のデフォルトのimages/stringsフォルダーにある同じ名前を使用すると、それらはオーバーライドされます。

これは完全に機能しています。そして私はそれに満足しています。


状況#1

_「私はデフォルト言語(デンマーク語を使用したい:しかし...本当の問題は...

私は、言語の設定を設定したいときです)in App 1 "_

私のAppApplication.javaファイルは特定の言語設定を呼び出さず、すべて正常です。 (共通のコアファイルの中で、私はデフォルトでローカル "DK"を設定しています)私のアプリは "値"フォルダのデフォルト文字列のすべての文字列を持つデンマーク語を持っています。

私のアプリでいくつかの特定の文字列を変更したい場合は、それらをアプリケーション固有の文字列「値」フォルダに置き、デフォルトの文字列を上書きします。 !!完璧!


状況#2

_ _ "私は私のアプリ1でスウェーデンの言語を使いたい"

マイAppApplication.javaファイルに次の行がある

LocaleAnswer[] localeAnswers = new LocaleAnswer[]{new LocaleAnswer(new Locale("sv", "SE"), "Swedish")}; 
    public LocaleAnswer[] getLocaleChoices(){ 
     return localeAnswers; 
    } 

私のLoc内に複数の言語を追加できますaleAnswers配列。共通コアは起動時に使用する言語を質問するダイアログを表示して処理します

デフォルトの文字列を変更する必要がない場合は、どんな特定の文字列ファイルでも心配する必要はありません。アプリはうまくコンパイルされ、アプリはスウェーデン語で表示されます。 YOUHOU !!完璧!

しかし、文字列を変更する必要がある場合は、この特定の文字列をアプリの「値」フォルダ内に配置することが考えられました。しかし、無:(:(:(:( 文字列が上書きされていない私はなぜ知っていると思う

:。私は私のアプリを実行するとプロジェクトが、すべてをコンパイルし、そして、言語に関する最後の呼び出しは、私のAppApplicationであります.javaファイルを使用してスウェーデン語ファイルを使用するように指定されているので、デフォルトの "values-sv"フォルダからスウェーデン語ファイルを使用します。 "フォルダに" values-sv "という名前を付けて、アプリケーションがスウェーデン語の文字列ファイルを呼び出すときに、特定のアプリケーション文字列を使用し、変更していない文字列をデフォルトの文字列を使用します。 ?私はちょうど "自動再起動の電話"アプリを作成する:D。Appはコンパイルするが、インストールしようとすると、再起動し、再起動し、再起動して何度も再起動します。私はSafeMode(ボリュームダウン+メニュー)で電話を起動して、再起動したときに、インストールしたアプリを消去してから電話機を通常どおりに再起動する必要がありました。 Huuu:/それはあまり役に立たない。

私のアプリ内に "values-sv"フォルダを複製し、そのうちの1つの名前を "値"に変更して、それを回避しようとしましょう。だから、私は私のアプリに "値"と "値 - sv"フォルダがあり、両方が同じ文字列ファイル(デフォルトのものから変更したい特定のスウェーデン語の文字列を含む)を含んでいます。そしてTADAAAMAMM !!それは働いている!

Coooooool、BUT、HOW?どうして ?


質問

  1. 私はこの重複している文字列は、私の文字列が変更されていするために、2つの異なるフォルダにファイルをしたくありません!私のアプリケーションで文字列ファイルが1つしかないデフォルトの文字列以外の特定の言語を選択すると、どのようにデフォルトの文字列を特定の文字列で変更することができますか?
  2. これはプロジェクトにとって非常に重要な質問ではありませんが、私のアプリで "values-sv"のような特定の言語名を持つ文字列フォルダのみを追加すると、再起動しますか?私はアプリが "値"フォルダを意味するデフォルト値を探していて、何もないので、BOUM、エラーがあると言います!しかし、なぜアプリケーションはクラッシュしないのですか?なぜ電話全体がリブートしていますか?

事前に感謝します。 C.

答えて

0

が実際に

  1. 回答)は、私の文字列ファイルで、私は "content_provider_authority" とコンテンツプロバイダのための "auth_account_type" を指定します。

    これら2つの文字列セットを、デフォルトの「値」フォルダ以外の「値-xx」フォルダに複製すると、電話機がクラッシュして無期限に再起動します。

    これで、 "content_provider_authority"と "auth_account_type"のみを含むstrings.xmlファイルの "値"フォルダが作成されました。私の "values-sv"フォルダには別のファイルがあります。strings.xmlファイルにはデフォルトの "values-sv"フォルダから変更したい特定の文字列がすべて含まれています。 :D

    これはうまく動作し、デフォルト言語、特定の言語または複数の言語の選択肢を問題なく定義できます。

  2. コンテンツプロバイダーの競合が発生して電話が再起動しているのはなぜですか?なぜアプリはクラッシュしないのですか?いい考えはありません!


私はまた、翻訳可能な文字列ではありませんと「値」フォルダではなく、「値-SV」の中でのappName文字列を設定する必要がありました。そうしないと、アプリがクラッシュすることはありませんが、アプリ名はパッケージ名になります;

C.