2013-12-11 149 views
4

我正在構建將在未來版本中進行本地化的應用程序,因此我想將其設置爲爲此做好準備。iOS中的Localizable.strings和本地化語言

目前我只有一種語言(法語),fr.lproj文件夾包含Localizable.strings以及相關鍵的法語翻譯。

問題是如果我將設備設置爲英文,我沒有收到法文默認翻譯,但我看到Keys名稱,我在NSLocalizedString中使用。

例如,如果我試圖拿到冠軍的視圖控制器具有:

NSLocalizedStrings(@"viewController_Title",nil); 

視圖控制器,用英語設備會顯示「viewController_title」作爲標題,而如果我設置的法語它工作沒有問題。

我該如何處理?

回答

0

您的項目設置爲使用英語作爲默認語言。

在您的Info.plist文件中: 將「Localization native development region」設置爲法語。

缺失的翻譯現在將回到法語而不是英語。

+0

沒有改變如果我將本地化本地開發區域設置爲法語。我仍然得到鑰匙而不是翻譯 – MatterGoal

1

在此字符串文件 「Localizable.strings」 需要聲明的本地化這樣

French.strings

「viewController_Title」= 「ViewController_Title_In_Frech」;

English.strings

「viewController_Title」= 「ViewController_Title_In_English」;

您需要使用這樣的

NSLocalizedStringFromTable本地化的字符串(重點,LanguageType,@ 「N/A」)

例如:

NSLocalizedStringFromTable("viewController_Title", English, @"N/A"); 

注:更改語言類型以編程方式,那麼你可以得到各自的本地化字符串。而且本地化的聲明必須在相關的字符串文件中。

+0

這是我在我的應用程序中使用的格式。它的工作正常。 – Ganapathy

1

你的問題是你需要一種語言來回退。 據我所知,在它周圍有沒有正式的方式,我寫的方法是這樣的過去:

NSString * L(NSString * translation_key) { 
    NSString * s = NSLocalizedString(translation_key, nil); 
    if (![[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@"en"] && [s isEqualToString:translation_key]) { 
     NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
     NSBundle * languageBundle = [NSBundle bundleWithPath:path]; 
     s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil]; 
    } 
    return s; 
} 

在這種情況下,使用L(@"viewController_Title");將返回字符串默認語言,在此案例是英文。

Shameless self-citation

0

正如在其他的答案中提到,默認情況下,英語在語言缺失的情況下使用。 有兩個解決方案:英語以及
1.添加本地化字符串文件(具有相同的內容,法國本地化的字符串已經)
2或調用UIApplicationMain

之前加入的main.m主要方法如下代碼
//sets the french as default language 
NSArray *lang = [[NSUserDefaults standardUserDefaults] stringArrayForKey:@"AppleLanguages"]; 
if ([lang count] > 0 && (![[lang objectAtIndex:0] isEqualToString:@"fr"])) { 
    NSLog(@"language is neither de nor fr. forcing de"); 
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"fr", @"en", nil] forKey:@"AppleLanguages"]; 
}