2011-12-06 97 views
6

在應用程序中,我只想支持德語。這是細跟所有我定義自己的文字,但我無法改變由系統提供的視圖,如UISearchBar的取消按鈕上顯示的文字:如果設備的語言是對系統視圖使用與當前設備語言不同的語言

UISearchBar with English localization

設置爲德語,取消按鈕正確顯示「Abbrechen」。但是,如果將設備語言設置爲英語(或任何其他語言),則該按鈕會顯示「取消」,因爲應用程序中的所有內容都是德語的,所以我也希望使用德語。是否有可能完成這項工作?我做錯了什麼?

  • 我只有一個de.lproj文件夾,並且沒有en.lproj文件夾。我在de.lproj文件夾中有InfoPlist.strings和我的主要nib文件。
  • 我用來訪問搜索欄的searchDisplayController屬性的內容視圖UIViewController的筆尖也位於de.lproj文件夾內。
  • 我已經設置了.pbxproj到德國內部的發展區域:

    developmentRegion = de; 
    
  • 我已經設置了「本地化本地開發區域」,以「德」的Info.plist文件內:

    <key>CFBundleDevelopmentRegion</key> 
    <string>de</string> 
    

回答

0

通過設置它的placeholder屬性,您可以輕鬆更改UISearchBar的佔位符文本。

但是,沒有任何簡單的鉤子去取消按鈕。

您可以訪問搜索欄的取消按鈕的方式是通過其子視圖去:

UIButton *cancelButton = nil; 

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

謝謝。我知道這個解決方案,但它只是搜索欄的「本地」修補程序,如果您的應用程序使用系統提供的更多視圖,則必須逐一「破解」它們。我正在尋找正確的方法來強制系統爲所有元素使用特定的本地化。 –

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; 
} 

但是,這隻能解決問題,如果你只有一個本地化。

0

您的解決方案已足夠,您不需要惹惱AppleLanguages。

如果您已經採取了您在問題中提及的所有步驟,那麼問題可能是您的設備(或模擬器)上已有en.lproj已與以前的版本相比。你需要做的是從設備(或模擬器)中刪除應用程序,在Xcode中運行Product > Clean並再次安裝。

這些都是爲我工作的步驟:

  • 只有在項目de.lproj文件夾(無en.lproj)。
  • 在project.pbxproj中設置developmentRegion = de;。在project.pbxproj中設置knownRegions = (de,);
  • 將「本地化本地開發區域」設置爲「de」。