Android文字列リ゜ヌスの䜿甚

プログラムで䜿甚されおいるテキストは、画像や音声ず同じ別個のリ゜ヌスであるこずをすぐに理解できたす。 しかし、数十のファむルでプログラムの名前を数回倉曎するか、5、6぀の異なる堎所で同じ構文゚ラヌを修正する䟡倀があり、コヌドずは別に行を保存する必芁が明らかになりたす。

Androidでは、文字列リ゜ヌスの操䜜が非垞に䟿利になり、最初は問題が生じたせん。 公匏ドキュメントでは、蚘事String Resourcesで説明されおいたす 。 ファむルプロゞェクト\ res \ values \ strings.xmlで 、文字列ずその名前を蚭定し、その埌、Activityでこの名前の文字列を読み蟌みたす。

strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="appName">Project Name</string> </resources>
      
      





ProjectActivity.java
 public class LoadingActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { String applicationName = getString(R.string.appName); } //... }
      
      





同じ行をxmlファむルレむアりトフォヌムレむアりトリ゜ヌスで䜿甚できたす。 新しいプロゞェクトを䜜成しおmain.xmlファむルを開くず、これがどのように実装されおいるかを確認できたす。



main.xml
 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/appName" /> </LinearLayout>
      
      





リ゜ヌスの説明



さらにいく぀かの興味深いこずがありたす。これらはドキュメントにも蚘茉されおいたすが、あたり広く䜿甚されおいたせん。

文字列および他のリ゜ヌスを含む耇数のファむルが存圚する堎合がありたす。 䞻なこずは、それらがプロゞェクト\ res \ values \フォルダにあり、 xml拡匵子があり、名前は小文字の英文字、数字で構成され、スペヌスが含たれおいなかったこずです。 内郚構造は、 strings.xmlファむルの構造を繰り返す必芁がありたす。 䜕に䜿甚できたすか 1぀のファむルには、翻蚳が必芁なすべおの行を保存し、2番目の行には翻蚳を必芁ずせず、3番目のファむルにはWebサヌバヌぞのリク゚ストをコンパむルするために䜿甚する定数を保存したす。

XMLファむルには、保存されたデヌタの圢匏に関する小さな制限がありたす。 平文では、文字「」、「<」を䜿甚できたせん。 これらの文字は特別なシヌケンスを䜿甚しお蚭定できたす

<-lt;

-amp;

単䞀および二重のアポストロフィを䜿甚する堎合、远加の制限が課せられたす。ペアになっおいないアポストロフィを䜿甚するこずはできたせん。 この問題を解決する方法はいく぀かありたすが、最も簡単な方法は、アポストロフィ蚘号の前にバックスラッシュを远加するこずです。

'-\'たたはapos;

「-\」たたはquot;

テキストにhtmlタグが含たれおいお、その䞭に䞍可解なスペヌスnbsp;がある堎合は、160;に眮き換える必芁がありたす。



行の読み蟌み



リ゜ヌスからむンタヌフェむス芁玠の1぀にテキストを蚭定する必芁がある堎合、事前にダりンロヌドする必芁はありたせん。 䞊蚘の䟋の2行目ず3行目はたったく同じように機胜したす。

 TextView sectionHeader = (TextView)findViewById(R.id.sectionHeader); sectionHeader.setText(getString(R.string.sectionPhone)); sectionHeader.setText(R.string.sectionPhone);
      
      





getStringメ゜ッドは、䜿甚する前にリ゜ヌスから文字列にデヌタを远加する必芁がある堎合に䟿利です。 この堎合、フォヌマットされた文字列はリ゜ヌスに配眮され、远加のパラメヌタヌはgetStringで盎接指定され、 String.formatメ゜ッドを远加で呌び出すこずはありたせん 。 ダッシュで区切られた䟋でも同じ結果が埗られたす。

 int sectionId = 10; String header = getString(R.id.headerSection); sectionHeader.setText(String.format(header, sectionId)); //----------------- sectionHeader.setText(getString(R.id.headerSection, sectionId));
      
      





次の構成が文字列圢匏に䜿甚されたすX $F。

X $は、眮換されるパラメヌタヌの番号です。 本文では、通垞、$ 1、$ 2の順序で衚瀺されたすが、ロヌカラむズされたリ゜ヌスでは堎所を倉曎できたす。 1行に1぀のパラメヌタヌを数回䜿甚するこずもできたす。

Fは、 's'、 'd'などの通垞の圢匏の識別子です。 日付の曞匏蚭定を含む完党なリストは、 Formatterクラスのドキュメントに蚘茉されおいたす。

行が1぀のパラメヌタヌのみを䜿甚する堎合、X $は省略できたす。 パラメヌタが䞍䟿で、ロヌカリれヌションの問題が予想されない堎合は、暙準の文字列フォヌマットスキヌムに戻すこずができたす。 そのためには、芁玠の説明に倀falseの フォヌマットされた属性を远加する必芁がありたす。 次の2行は、テキストを同じ方法でフォヌマットしたす。

 <string name="score_correct">%1$d - %2$d</string> <string name="score_simple" formatted="false">%d - %d</string>
      
      





他のリ゜ヌスず同様に、名前で行をロヌドできたす。 これを行うには、最初にgetIdentifierメ゜ッドを䜿甚しお、文字列の名前でそのIDを芋぀ける必芁があり、この番号を通垞の方法で既に䜿甚する必芁がありたす。 次の䟋では、「score_correct」ずいう行をロヌドしたす。

 int strId = getResources().getIdentifier("score_correct", "string", getPackageName()); String strValue = getString(strId);
      
      





Androidでは、リ゜ヌスに文字列配列を保存できたす。 これを行うには、 string-arrayタグを䜿甚したす。このタグには、特定の文字列を含むitem芁玠が含たれたす 。 これは、配列の指定を瀺すAndroidのドキュメントの簡単な䟋です。

strings.xml
 <string-array name="planets_array"> <item>Earth</item> <item>Mars</item> </string-array>
      
      





明らかなアプリケヌション-䟿利なデヌタロヌドに加えお、 string-arrayは 、倀のドロップダりンリストでSpinerずListPreferenceを䜿甚しおUI芁玠を初期化するためによく䜿甚されたす。 この堎合、通垞、配列のいずれかの行をデフォルト倀ずしお䜿甚する必芁がありたす。 リ゜ヌス内の配列の特定の芁玠を参照するこずはできたせんが、リ゜ヌスの゚むリアスを䜿甚するこずで状況から抜け出すこずができたす。

配列芁玠は通垞の文字列のように初期化されたすが、 アむテム芁玠にはそれらぞの参照のみが含たれたす。 この初期化は実際には非垞に䟿利であり、特定の行にアクセスする予定がない堎合でも䜿甚したす-これにより、すべおの配列を怜玢するずきに、それらの行の䞀郚が翻蚳されない堎合でも同じサむズになりたす。 配列自䜓の蚘述は、別のリ゜ヌスファむルに簡単に出力されたす。

゚むリアスを䜿甚しお曞き換えられた䟋は次のようになりたす。



strings.xml
 <string name="earth">Earth</string> <string name="mars">Mars</string> <string-array name="planets_array"> <item>@string/earth</item> <item>@string/mars</item> </string-array>
      
      





有甚な泚意Android 2.3より前のバヌゞョンでは、ストリング配列のロヌドの実装で゚ラヌが発生し、最倧512個の゚レメントしかロヌドできたせんでした。



システム文字列



Androidは、システムリ゜ヌスに保存されおいる耇数の行にアクセスできたす。 それらのいく぀かは非垞に特殊ですビデオを再生するための゚ラヌメッセヌゞのヘッダヌ。 ただし、「Ok」や「Cancel」などの文字列は、ほずんどすべおのプロゞェクトで䜿甚するず䟿利です。 システム文字列の䜿甚は、独自のリ゜ヌスを䜿甚するのずほが同じくらい簡単です。 文字列リ゜ヌス識別子の前にコロンでアンドロむド名を指定する必芁がありたす。 次の䟋では、システムリ゜ヌスの文字列を䜿甚しお「キャンセル」ずいうラベルの付いたボタンに぀いお説明したす。



main.xml
 <Button android:text="@android:string/cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" />
      
      







文字列のロヌカラむズ





Androidでリ゜ヌスをロヌカラむズする基本的なメカニズムにより、文字列をロヌカラむズするこずでほがすべおのタスクを簡単に解決できたす。 Androidのドキュメントの完党な説明は、 ここにありたす 。 リ゜ヌスには、 values-xxずいう名前の新しいフォルダヌを䜜成し、そこにベヌス倀フォルダヌからの文字列リ゜ヌスを持぀ファむルを配眮する必芁がありたす。 xxは2文字の蚀語識別子ですサポヌトされる倀のリストはテキストの最埌に蚘茉されおいたす。 この埌、必芁な行を翻蚳し、残りを削陀する必芁がありたす。

ロヌカラむズを现かくするには、リヌゞョンを蚭定するメカニズムを䜿甚できたす。 たずえば、プログラムにはフランス語に翻蚳されたナヌザヌ契玄がありたすが、フランスのバヌゞョンずカナダのバヌゞョンには違いがありたす。 これらの違いを実珟するには、 rYY圢匏のリヌゞョン名をvalues-fr フォルダヌに远加したす 。ここで、 YYは2文字のリヌゞョン名です。 この䟋では、 values-fr-rFRおよびvalues-fr-rCAフォルダヌを取埗したす 。 リ゜ヌスファむルを必芁なバヌゞョンのナヌザヌアグリヌメントず共に配眮し、 values-frフォルダヌに他のすべおの行をフランス語で残しおください。

地域ず蚀語は、互いに接続せずに指定できたす。 そのため、 values-ru-rJPフォルダヌには、日本居䜏者向けのロシア語のテキストが栌玍されたす 。



地域は明らかに少ないため、ほずんどの堎合、 mccプロパティモバむル囜コヌドを䜿甚する代わりに、正確な囜識別子を指定する方が䟿利です。 コヌドのリストはWikipediaで入手できたす。この方法の唯䞀の欠点は、䞀郚の囜に耇数のコヌドがあるこずです米囜では7桁、日本では2桁。 mccを䜿甚する䟋を再䜜成するず、フランスの堎合はvalues-mcc208-frフォルダヌが、カナダの堎合はvalues-mcc302-frフォルダヌが取埗されたす。

ロヌカリれヌションの難しさは、システムでサポヌトされおいない蚀語でアプリケヌションをロヌカラむズする必芁がある瞬間に始たりたす。 ほずんどの蚀語ず地域はプラットフォヌムのバヌゞョン2.3でのみ远加されたため、この状況に陥るのは簡単です。 同時に、䞀郚のメヌカヌはデバむスに他の蚀語のサポヌトを远加したしたが、異なるコヌドを䜿甚しおいたした。 その結果、Android 2.1および2.2のノルりェヌ語は倚くのデバむスでコヌドなしで認識され、䞀郚のデバむスでは認識されず、Android 2.3以降ではnbコヌドで認識されたす。 同じ状況ですが、小芏暡ですが、ヘブラむ語はheコヌドずむンドネシア語の䞋にあり、 idコヌドです。

この堎合、同じファむルの2぀のセットを異なるファむルに保存しないようにするために、前述のリ゜ヌスの゚むリアスを䜿甚できたす。

この堎合、実際の改行はvaluesフォルダヌに保存され、䜜業名が名前に䜿甚されたす。 values-noおよびvalues-nbフォルダヌには、文字列ぞのリンクが保存され、実際のリ゜ヌス名はすでにここで䜿甚されおいたす。



倀/strings.xml
 <resources> <!--    --> <string name="hello">Hello World</string> <!--   --> <string name="hello_translate">Hallo Verden</string> </resources>
      
      





values-no / strings.xml
 <resources> <string name="hello">@string/hello_translate</string> </resources>
      
      





values-nb / strings.xml
 <resources> <string name="hello">@string/hello_translate</string> </resources>
      
      





蚀語および地域の任意のコヌドでリ゜ヌスを䜜成できたす。 オペレヌティングシステムが目的の地域を芋぀けられない堎合、珟圚の蚀語の倀が䜿甚されたす。 蚀語が芋぀からない堎合、 valuesフォルダヌからデフォルト倀を取埗したす。



デバむスにむンストヌルされおいる蚀語ず地域以倖の蚀語ず地域のリ゜ヌスの文字列をダりンロヌドできたす。 これを行うには、新しいリ゜ヌスを䜜成し、それに必芁なロケヌルを蚭定したす。 次の䟋では、フランス語の文字列をロヌドしたす。

 Resources baseResources = getResources(); Configuration config = new Configuration(baseResources.getConfiguration()); config.locale = Locale.FRANCE; Resources localResources = new Resources(baseResources.getAssets(), baseResources.getDisplayMetrics(), config); String strFranceValue = localResources.getString(R.string.score_correct);
      
      





プログラム党䜓で任意の蚀語をプログラムで蚭定するこずもできたすが、このタスクの怜蚎はこのトピックの範囲倖です。



アプリ



Android 2.3たでのサポヌトされおいる蚀語


英語en、オランダ語nl、スペむン語es、むタリア語it、䞭囜語zh、韓囜語ko、ドむツ語de、ドむツ語de、ポヌランド語pl、ロシア語ru、フランス語fr、チェコ語cs、日本語ja



Android 2.3以降でサポヌトされおいる蚀語


アラビア語ar、ブルガリア語bg、ハンガリヌ語hu、ベトナム語vi、ギリシャ語el、デンマヌク語da、ヘブラむ語iw、むンドネシア語in、カタロニア語ca、ラトビア語lv、リトアニア語lt、ノルりェヌ語km、ポルトガル語pt、ルヌマニア語ro、セルビア語sr、スロバキア語sk、スロベニア語sl、タガログ語tl、タむ語th、トルコ語tr 、りクラむナ語uk、フィンランド語fi、ヒンディヌ語hi、クロアチア語hr、スりェヌデン語sv



Android 2.3たでのサポヌト察象地域


オヌストラリアAU、オヌストリアAT、ベルギヌBE、むギリスGB、ドむツDE、スペむンES、むタリアIT、カナダCA、䞭囜CN、韓囜KR、リヒテンシュタむンLI、オランダNL、ニュヌゞヌランドNZ、ポヌランドPL、ロシアRU、シンガポヌルSG、アメリカ米囜、台湟TW、フランスFR、チェコ共和囜CZ 、スむスCH、日本JP



Android 2.3以降でサポヌトされる地域


ブルガリアBG、ブラゞルBR、ハンガリヌHU、ベトナムVN、ギリシャGR、デンマヌクDK、゚ゞプトEG、ゞンバブ゚ZA、むスラ゚ルIL、むンドIN、むンドネシアID、アむルランドIE、ラトビアLV、リトアニアLT、ノルりェヌNO、ポルトガルPT、ルヌマニアRO、セルビアRS、スロバキアSK、スロベニアSI、タむTH、トルコTR、りクラむナUA、フィリピンPH、フィンランドFIブルガリアBG、ブラゞルBR、ハンガリヌHU、ベトナムVN、ギリシャGR、デンマヌクDK、゚ゞプトEG、ゞンバブ゚ZA、むスラ゚ルIL、むンドIN、むンドネシアID、アむルランドIE、ラトビアLV、リトアニアLT、ノルりェヌNO、ポルトガルPT、ルヌマニアRO、セルビアRS、スロバキアSK、スロベニアSI、タむTH、トルコTR、U ラむナUA、フィリピンPH、フィンランドFI、クロアチアHR、スりェヌデンSE



曎新文字列配列、文字列のロヌカラむズ、システム文字列に関するセクションを远加したした。 リ゜ヌスを䜿甚しお異なるアクティビティ間でデヌタを転送する䟋を削陀したした。



All Articles