2011-12-06 17 views
6

アプリケーションでは、私はドイツ語のみをサポートしたいと考えています。これは私が自分自身を定義しますが、私は、このようなUISearchBarのキャンセルボタンなどのシステムが提供するビューで表示されたテキストを変更することはできませんテキストのすべての罰金です:現在のデバイス言語とは異なる言語をシステムビューに使用

UISearchBar with English localization

デバイスの言語がある場合ドイツ語に設定すると、キャンセルボタンに「Abbrechen」が正しく表示されます。ただし、デバイス言語を英語(または他の言語)に設定した場合、ボタンには「キャンセル」と表示されます。アプリケーションのすべてがドイツ語であるため正しくありません。ドイツ語でもこのボタンを使用します。これを行うことは可能ですか?何が間違っていますか?

  • 私にはde.lprojフォルダしかありません。en.lprojフォルダはありません。私はInfoPlist.stringsとメインのnibファイルをde.lprojフォルダの中に持っています。
  • UIViewControllerのコンテンツビューのペン先は、検索バーにアクセスするために使用するプロパティもde.lprojフォルダ内にあります。

    <key>CFBundleDevelopmentRegion</key> 
    <string>de</string> 
    
    :私は、Info.plistファイル内の「ローカライズネイティブ開発領域」への「デ」に設定している

    developmentRegion = de; 
    
  • :私はドイツに.pbxproj内部の現像領域を設定している

答えて

0

UISearchBarのプレースホルダテキストは、placeholderプロパティを設定することで簡単に変更できます。

ただし、キャンセルボタンには簡単に触れることはできません。あなたが検索バーのキャンセルボタンにアクセスすることができ

方法は、サブビューを経ることである:

UIButton *cancelButton = nil; 

    for(UIView *subView in [searchBar subviews]) 
    { 
     if([subView isKindOfClass:[UIButton class]]) 
     { 
      cancelButton = (UIButton*)subView; 
      [cancelButton setText:@"Abbrechen"]; 
     } 
    } 
+0

ありがとうございました。私はこの解決策を知っていましたが、それは検索バーの「ローカル」修正だけで、システムが提供するビューをもっと多く使うと、それらを1つ1つ「ハック」する必要があります。私はシステムがすべての要素に対して特定のローカライズを使用するように強制する正しい方法を探しています。 –

0

this answerにより示唆されるように、私は、プログラムのメイン機能でハードコーディングアプリケーション言語によってこの問題を解決するために管理しています。

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[NSArray arrayWithObject:@"de_DE"] forKey:@"AppleLanguages"]; 

    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

ただし、これはローカライゼーションが1つだけの場合にのみ問題を解決します。

0

解決策は十分です。AppleLanguagesを使いこなす必要はありません。

ご質問で言及したすべての手順を実行した場合は、以前のビルドのデバイス(またはシミュレータ)にすでにen.lprojが存在していた可能性があります。あなたがする必要があるのは、デバイス(またはシミュレータ)からアプリケーションを削除し、XcodeでProduct > Cleanを実行してもう一度インストールすることです。

  • をのみプロジェクト(なしen.lproj)にde.lprojフォルダを持っている:

    それらは私のために働いた手順です。

  • project.pbxprojにdevelopmentRegion = de;を設定します。
  • project.pbxprojにknownRegions = (de,);を設定します。
  • "ローカライゼーションネイティブ開発領域"を "de"に設定します。
関連する問題