7

NSLocalizedString は、参照されたキーの期待値を返す時間の半分しか機能しません。それ以外の場合は、NSLocalizedString で指定されたキー名を取得し、他のすべての実行で一貫して発生します。

現在のところ、私は英語のみをサポートしています。

私は電話しています:

NSString *someText = NSLocalizedString(@"mystring.keyname", nil);

en.lproj/Localizable.strings の内容:

"mystring.keyname" = "Hello there!";

正常に動作していない場合、someText's値はmystring.keynameです。

信頼性をテストする方法は次のとおりです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    NSLog(@"Strings file: %@", [bundle pathForResource:@"Localizable" ofType:@".strings"]);
    NSLog(@"Localizations: %@", [bundle localizations]);
    NSLog(@"Local Dict: %@", [bundle localizedInfoDictionary]);
    NSLog(@"localizedStringForKey: %@", [bundle localizedStringForKey:@"mystring.keyname"value:@"Wha happened?" table:nil]);
    NSLog(@"Localized String: %@", NSLocalizedString(@"mystring.keyname", @"Are you sure you want to start a new game?"));
}

これは、他の実行ごとに期待値を出力します。

Run #1:
Local Dict: (null)
localizedStringForKey: Hello there!
Localized String: Hello there!

Run #2:
Local Dict: (null)
localizedStringForKey: Wha happened?
Localized String: mystring.keyname

私のファイルは次のようにレイアウトされています:

WORKSPACE_DIR/ 
  my_workspace_name.xcworkspace
  PROJECT_DIR/
    - my_project_name.xcodeproj
    RESOURCES_DIR/
      - en.lproj/
          Localizable.strings

XCode のプロジェクト レベルの設定:

1) Build Phases has Localizable.strings listed in the "Copy Bundle Resources".

2) Build Settings:
   Convert Copied Files => YES
   Property List Output Encoding => binary
   Strings file Output Encoding => UTF-16        

3) Info.plist's: CFBundleDevelopmentRegion => 'en'

Localizable.strings は UTF-16 として構成されていますが、文字列ファイルが選択されているファイル インスペクターに [テキスト設定] オプションが表示されません。しかし、Unix LF でエンコードを Unicode (UTF-16) として表示する TextWrangler でファイルを開くことにより、エンコードの種類を確認しました。

これを常に機能させる方法について何か提案はありますか?

4

3 に答える 3

3

ローカライズ可能なファイルに余分なセミコロンがある場合、ビルドはできますがローカライズに失敗します。

于 2015-10-07T18:45:50.460 に答える
1

解決策を尋ねてから数分後、私はそれを見つけました。サードパーティから別の Localizable.strings を含めました。それを削除すると、1 回おきに翻訳が失われることはなくなりました。

于 2014-05-27T11:00:52.420 に答える
1

ターゲットには、「Localizable.strings」という名前のファイルが複数必要です。Xcode はこの問題を処理できません。名前を変更し、「NSLocalizedStringFromTable」を使用してそこからロードできます。詳細については、以下を参照してください: プロジェクトに ShareKit がある場合、ローカライズ文字列が常に機能するとは限らない

于 2013-03-07T16:56:58.283 に答える