ローカライズされたディレクトリへのパスを見つける方法は?

ios iphone localization
ローカライズされたディレクトリへのパスを見つける方法は?

アプリでhtmlファイルと画像を含むディレクトリを配布する必要があります。

アプリはさまざまな言語をサポートしています。 言語ごとに_ディレクトリ_を作成し、現在のロケールに基づいて適切なものを選択します。

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [[NSBundle mainBundle] pathForResource:@"index"
                                                 ofType:@"html"
                                            inDirectory:[language stringByAppendingPathExtension:@"html"];];

if (![[NSFileManager defaultManager] fileExistsAtPath:path])
{
    // Fallback to english
    path = [[NSBundle mainBundle] pathForResource:@"index"
                                           ofType:@"html"
                                      inDirectory:@"en.html"];
}

_上記の作業を行う代わりに、これに対処するにはどうすればよいですか(少し面倒です)。

おそらくこれに「xx.lproj」ディレクトリを使用し、各xx.lprojディレクトリにローカライズされたhtml _directory_を配置し、「NSBundle pathForResource」を使用して正しいファイルを見つけることを考えています。 しかしそれを動作させることができませんでした。

  5  2


ベストアンサー

`[NSBundle pathForResource:ofType:]`で `xx.lproj`フォルダーを使用するのは簡単です。

Xcodeのプロジェクトファイルに `index.html`を追加して、[情報を見る]ウィンドウからローカライズ可能にすることができます。 「de」などの別の言語を追加すると、Xcodeは「index.html」を新しく作成した「de.lproj」にコピーします。 そのファイルを削除すると、アプリは英語版にフォールバックします。

ロギングでテストできます:

NSLog([[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]);

6


私もこれを機能させることができません:

    NSLog([[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]);

しかし、これは標準のXcode language.lproj構造(たとえば、en.lproj)を使用して行います:

    NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
    NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index"
                  ofType:@"html"
                  inDirectory:[language stringByAppendingPathExtension:@"lproj"]];

余分なものも削除されました。上記のマーティンの元の質問で…​

3


追加のヒント:ビルドされた製品のローカライズされていないバージョンのファイルを必ず削除してください。削除しないと、pathForResourceはローカライズされたファイルではなくそれらのファイルを見つけます。

3


なぜ「forLocalization」の方法ではないのか:

        htmlFile = [[NSBundle mainBundle] pathForResource:@"myContent"
                                               ofType:@"html"
                                          inDirectory:@"de.lproj"
                                      forLocalization:@"de"];

これは、Xcode 5.1.1およびiOS 7.1で正常に機能します。

@Martin Wickman(フォールバック付き)の一般化を追加すると、すべてが素晴らしいはずです。

1


あなたはこれを使用することができます:

NSString *filename = [NSString stringWithFormat:@"html_%@.html", NSLocalizedString(@"abbr", @"")];

0


タイトルとURLをコピーしました