簡體   English   中英

iOS:無需重啟即可更改本地化的xib

[英]iOS: Change Localized xib without restart

我知道有一些pod用於更改本地化的字符串文件而無需重新啟動..就像iOS-CustomLocalisator但我的問題是我的項目嚴重依賴於xibs並且它試圖依賴於服務器本地化而不是設備本地化。

希望有辦法解決這個問題。

我認為您首先需要本地化所有xib(通過單擊文件檢查器中的“Localize ...”按鈕)。 如果您需要,請選擇您需要的語言並對Localizable.strings執行相同的操作。

然后導入項目中的BundleLocalization文件。 如果您需要更改語言,只需使用:

[[BundleLocalization sharedInstance] setLanguage:@"fr"];

它適用於xib,storyboard和NSLocalizedString函數。 唯一的“問題”是您在設置語言時需要重新加載當前視圖控制器。 如果你有一個UINavigationController(有一個xib或一個stroyboard,它可以使用),你可以使用這種方法:

UINavigationController *navController = self.navigationController;
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"currentViewControllerId"];
NSMutableArray *viewControllersArray = [[NSMutableArray alloc] initWithArray:navController.viewControllers];
[viewControllersArray replaceObjectAtIndex:([navController.viewControllers count] - 1) withObject:vc];
navController.viewControllers = viewControllersArray;

我目前在我的應用程序上這樣做。

  1. 創建了一個類來訪問所需語言的所需字符串。

     #import <Foundation/Foundation.h> @interface RDLocalizedString : NSObject + (NSString*)localizedStringForKey:(NSString*)key; @end #import "RDLocalizedString.h" @implementation WMLocalizedString + (NSString*)localizedStringForKey:(NSString*)key{ //This method will return the name of the string file. my string files are all (en.strings, fr.strings, es.strings ,etc) NSString *tableName = [[LanguageManager sharedManager] getCurrentlanguageKey]; NSString* str = [[NSBundle mainBundle] localizedStringForKey:key value:@"#NA#" table:tableName]; //if no string is found use the english pne if ([str isEqualToString:@"#NA#"]) { str = [[NSBundle mainBundle] localizedStringForKey:key value:@"#NA#" table:@"en"]; } return str; } @end 
  2. 在視圖上添加方法上的所有字符串。

     - (void)loadStrings{ //Load all strings here self.titleLabel = [RDLocalizedString localizedStringForKey:@"mainTitle"]; } 
  3. 在語言改變時運行的創建和觀察者。

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStrings) name:@"LANGUAGE_HAS_CHANGE" object:nil]; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM