2012-07-20 63 views
6

我想在我的應用程序中有一個選項來更改我的應用程序語言(只是應用程序語言不是整個系統),請您給我一些提示?更改iOS中的應用程序語言設置不是整個設備

在此先感謝,

我知道本地化!

+0

我想這個帖子是一個很好的出發點: http:// stackoverflow。com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – 2012-07-20 11:38:56

+0

我覺得你不能在沒有設備的情況下只改變你的應用程序的語言。 – 2012-07-20 11:57:30

+0

@VineeshTP您可以在開發時更改設備和模擬器的語言設置。看看我的答案。 – Abizern 2012-07-20 13:17:14

回答

2

您可以通過使用從Xcode設置的自定義構建標誌來完成此操作。這樣,您可以在本地化下運行應用程序,而不必更改設備的所有設置。

我寫了一篇博客文章關於它在http://abizern.org/2012/03/18/simple-localisation-testing/

而且還有在Github上的示例項目,你可以用它來看看它在行動:https://github.com/Abizern/SimpleLocalisationTesting

+0

我有同樣的問題,但我怎麼能找到這個-AppleLanguages soryy我是新來的iOS – 2012-07-20 11:56:10

+0

這只是你可以在運行時傳遞的旗幟之一。 – Abizern 2012-07-20 15:26:35

+1

感謝您的文檔。但從這個文檔中,它不是完全清楚如何設置它爲新的 – User16119012 2014-03-06 07:37:12

1

我製作了由.plist填充字典數組的自定義本地化。像這樣:

kYes 
    en = @"Yes" 
    ru = @"Да" 
kNo 
    en = @"No" 
    ru = @"Нет" 

在我的項目中,我做了一個singleton類來讀取這個字符串。在選項中,用戶選擇所需的語言(首先啓動應用程序從當前系統狀態中選擇語言或設置默認語言)。所選語言必須保存在文件或設置中,以便在下次啓動時使用。 在單身我有+getStringWithKey:。因此,我通過@「kYes」獲取字符串,僅用於應用程序的當前本地化。此外,您還需要將標準本地化文件添加到項目中,甚至是空的,因爲如果您不支持,則所有支持的語言都不會顯示在iTunes中。

1

我其實是想換個思路如何更改應用程序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);你就完成了。 到目前爲止我還沒有做到,但它應該可以工作。

相關問題