回答
您可以通過使用從Xcode設置的自定義構建標誌來完成此操作。這樣,您可以在本地化下運行應用程序,而不必更改設備的所有設置。
我寫了一篇博客文章關於它在http://abizern.org/2012/03/18/simple-localisation-testing/
而且還有在Github上的示例項目,你可以用它來看看它在行動:https://github.com/Abizern/SimpleLocalisationTesting
我有同樣的問題,但我怎麼能找到這個-AppleLanguages soryy我是新來的iOS – 2012-07-20 11:56:10
這只是你可以在運行時傳遞的旗幟之一。 – Abizern 2012-07-20 15:26:35
感謝您的文檔。但從這個文檔中,它不是完全清楚如何設置它爲新的 – User16119012 2014-03-06 07:37:12
我製作了由.plist填充字典數組的自定義本地化。像這樣:
kYes
en = @"Yes"
ru = @"Да"
kNo
en = @"No"
ru = @"Нет"
在我的項目中,我做了一個singleton類來讀取這個字符串。在選項中,用戶選擇所需的語言(首先啓動應用程序從當前系統狀態中選擇語言或設置默認語言)。所選語言必須保存在文件或設置中,以便在下次啓動時使用。 在單身我有+getStringWithKey:
。因此,我通過@「kYes」獲取字符串,僅用於應用程序的當前本地化。此外,您還需要將標準本地化文件添加到項目中,甚至是空的,因爲如果您不支持,則所有支持的語言都不會顯示在iTunes中。
我其實是想換個思路如何更改應用程序ui中的語言,但它會強制您1.手動設置所有字符串2.提供方法(通知),以便在語言設置更改時更新所有UI元素。 這個想法基於iOS用來查找字符串本地化版本的相同方法。因此,作爲先決條件,您必須提供包含文件夾結構language_id.lproj的軟件包(例如AppNameStrings.bundle),其中language_id是要提供的語言的指示符。您可以創建一個設置包,在Finder中打開它並刪除root.plist文件來創建這樣的包。接下來,您需要一個可以用來從您的包中讀取的函數。以下是我用來讀取本地化字符串的兩種方法。 將下面的方法,你GlobalDefinitions.h文件
#ifdef __OBJC__
NSBundle *yourNameBundle(void);
NSString *YourNameLocalized(NSString *stringToken, NSString *language);
#endif
這個代碼在你GlobalDefinitions.m文件
NSBundle *yourNameBundle(void) {
static NSBundle* bundle = nil;
if (!bundle) {
NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"];
bundle = [NSBundle bundleWithPath:path];
}
return bundle;
}
NSString *YourNameLocalized(NSString *stringToken, NSString *language) {
if (yourNameBundle()) {
return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language];
} else {
return stringToken;
}
}
你必須創建一個NSBundle一個類別
[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]
因爲標準方法忽略了語言參數。在你的方法中,你打開相應的language.lproj/Root.strings文件並掃描它的stringToken。如果找不到它,則返回標記本身,否則返回文本字符串。 無論您何時需要您編寫的某些文本的本地化版本,例如label.text = YourNameLocalized(@「Token」,[self provideLanguageIdentifier);你就完成了。 到目前爲止我還沒有做到,但它應該可以工作。
- 1. 作爲設備語言更改更改應用程序語言
- 2. iOS設備上的語言更改
- 3. 改變應用程序的語言,而不改變設備
- 4. 更改設備的語言設置(語言環境)
- 5. 當用戶更改設備語言時應用程序崩潰
- 6. 根據語言設置更改應用程序中的單詞
- 7. 當應用程序處於後臺時更改設備語言
- 8. 更改ios應用程序的語言
- 9. 更改iOS應用程序語言,而無需重新啓動設備
- 10. iPhone應用程序使用不同於OS /設備中設置的語言的語言?
- 11. iOS應用程序更改語言與自定義設置屏幕
- 12. 更改應用程序中設置更改的系統設置
- 13. 在iTunes中設置iOS應用程序語言
- 14. 在片段中更改整個應用程序的語言?
- 15. 設置ios應用程序的語言特定名稱
- 16. 更改應用程序名稱如果iPad更改語言設置
- 17. 在整個Android應用程序中更改語言
- 18. 是否可以更改設備設置僅適用於我的應用程序?
- 19. 如何更改整個android應用程序的語言?
- 20. 如何在後臺運行iOS應用程序(iOS 9+)直到用戶更改iOS設備的WiFi設置
- 21. 如何在Android中將設備語言默認設置爲我的應用程序語言?
- 22. C++在整個程序中設置語言環境
- 23. 在應用程序中更改語言
- 24. iOS應用程序不會更改爲RTL語言
- 25. 更改iPhone的語言設置對我的應用程序的影響
- 26. iOS:如何知道設備語言何時更改?
- 27. 應用程序不會在iOS設備上調整大小
- 28. NSUserDefaults是整個設備的全局還是應用程序
- 29. 如何更改MPMediaPickerController的語言設置。
- 30. 代碼推送不更新iOS設備上的應用程序
我想這個帖子是一個很好的出發點: http:// stackoverflow。com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – 2012-07-20 11:38:56
我覺得你不能在沒有設備的情況下只改變你的應用程序的語言。 – 2012-07-20 11:57:30
@VineeshTP您可以在開發時更改設備和模擬器的語言設置。看看我的答案。 – Abizern 2012-07-20 13:17:14