2013-01-23 15 views
6

NSLocalizedStringは、参照されるキーの期待値を返す場所の半分にしか動作しません。私はNSLocalizedStringで指定されたキー名を取得し、他のすべての実行で一貫して発生します。NSLocalizedStringは時々文字列を読み込みます。

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

私が呼んでいる:en.lproj /のLocalizable.stringsの

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

内容:

"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でファイルを開くことで、エンコーディングタイプを確認しました。

これをいつも動かすための提案はありますか?

+0

解決方法を見つけましたか?同じ問題が発生し、他のローカライゼーションが実行されていません。 –

答えて

1

ターゲットに「Localizable.strings」という名前のファイルが複数ある必要があります。 Xcodeはこの問題を処理できません。 名前を変更して「NSLocalizedStringFromTable」を使用してロードすることができます。 詳細については、次を参照してください。 Localisation strings not always work having ShareKit in a project

1

解決策を求めてから数分後に見つかりました。 私は第三者から別のLocalizable.stringsを追加しました。一度それを取り除くと、もう一度失われた翻訳はなくなります。

3

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

関連する問題