1. 程式人生 > >iOS開發中配置了國際化檔案,但是隻想顯示中文

iOS開發中配置了國際化檔案,但是隻想顯示中文

場景描述:

        我的專案配置了國際化檔案,但是英文翻譯還沒有完成,所以,我想在專案中只顯示中文。

解決辦法:

首先,建立NSBundle的Category

File->New->File...->iOS->Source->Objective-C->next



NSBundle+Language.h檔案內容

#import <Foundation/Foundation.h>

@interface NSBundle (Language)

+ (void)setLanguage:(NSString *)language;

@end

NSBundle+Language.m檔案內容

#import "NSBundle+Language.h"

#import <objc/runtime.h>

staticconst char _bundle =0;

@interface BundleEx :NSBundle

@end

@implementation BundleEx

- (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName {

NSBundle

*bundle =objc_getAssociatedObject(self, &_bundle);

return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName];

}

@end

@implementation NSBundle (Language)

+ (void)setLanguage:(NSString *)language {

static 

dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

object_setClass([NSBundle mainBundle], [BundleEx class]);

    });

objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundlepathForResource:language ofType:@"lproj"]] :nil,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

@end

然後,在AppDelegate.m中匯入#import"NSBundle+Language.h"

在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中新增程式碼

    if ([[NSUserDefaults standardUserDefaultsobjectForKey:@"myLanguage"] && ![[[NSUserDefaults standardUserDefaultsobjectForKey:@"myLanguage"isEqualToString:@""]) {

        [NSBundle setLanguage:[[NSUserDefaults standardUserDefaultsobjectForKey:@"myLanguage"]];

    }else {

        [self changeLanguageTo:@"zh-Hans"];

    }

其中,方法 - (void)changeLanguageTo:(NSString *)language 的定義如下:

- (void)changeLanguageTo:(NSString *)language {

// 設定語言

    [NSBundlesetLanguage:language];

//然後將設定好的語言儲存好,下次進來直接載入

    [[NSUserDefaults standardUserDefaults] setObject:language forKey:@"myLanguage"];

    [[NSUserDefaults standardUserDefaults] synchronize];

}



相關推薦

iOS開發配置國際化檔案但是顯示中文

場景描述:         我的專案配置了國際化檔案,但是英文翻譯還沒有完成,所以,我想在專案中只顯示中文。 解決辦法: 首先,建立NSBundle的Category File->New-&g

linux/etc/profile配置環境變數但是程式還是無法直接啟動

   安裝配置了Hive程式,正常可以啟動,也在/etc/profile中配置了環境變數,但是直接命令列hive啟動失敗 1./etc/profile中的部分配置資訊: export HIVE_HOME=/opt/modules/hive-0.13.1-c

iOS開發怎麼建立Plist檔案

1.就是手動建立.plist檔案。選中Xcode,使用快捷方式command+N建立plist檔案1.png建立plist檔案2.png手動新增屬性.png注意:只能讀取,不能用程式碼進行更刪改查。。(如果本身plist檔案在bundle中是無法修改的,需要先從Bundle中移出才可以。你應該把Plist檔案

完美解決ios開發兩個.framework檔案.o檔案衝突的問題(linker command failed with exit code 1 (use -v to see invocation)

專案中使用到XYPrinter.framework和Printer.framework中的兩個.o檔案有衝突, 查了資料通過拆分XYPrinter.framework刪除其中衝突的.o檔案,然後重新生成靜態庫, 解決了問題. 步驟如下: 新建一個資料夾resolveConfli

layout下新建XML檔案R.java沒有生成id(已解決)

 描述:方案1.xml出錯了,導致程式不能自動編譯,將大寫改成小寫的,xml命名不能有大寫字母的。 2. 右鍵--》Android tools --> fix project properties 3.是不是你的程式碼有語法錯誤,導致不能生成r.java clean一下 4.那就重新指定下sdk版本。

Linux配置samba服務器實現局域網中文件共享。

this 註釋 防火 服務器 ESS his sta force mask linux中搭建samba服務,實現局域網中文件共享 Samba是在Linux和UNIX系統上

[iOS]怎樣在iOS開發切換顯示語言實現國際化

art out title oca standard 文件 creat mit 工具類 1.在Project設置,加入中英兩種語言:2.新建Localizable.strings文件,作為多語言相應的詞典,存儲多種語言,點擊右側Localization,勾選中英:3.加入

在64位的ubuntu 14.04 上開展32位Qt 程式開發環境配置(pro檔案增加 QMAKE_CXXFLAGS += -m32 命令)

為了能中一個系統上開發64或32位C++程式,費了些周折,現在終於能夠開始幹過了。在此記錄此時針對Q5.4版本的32位開發環境配置過程。 1. 下載Qt 5.4 的32位版本,進行安裝,安裝過程中會發現一些32位的庫沒有安裝,根據提示的錯誤逐個安裝上即可。 2. 開啟一個SampleCode 中的cube

Qt開發技巧:編寫.pro檔案在構建流程加入命令列的方法

1、在專案構建前執行命令 在專案構建前執行命令cmd 存在問題 system(cmd) 存在執行多次的問題,可以參考message函式的QMake Manual說明

Shiro 專案開發第一次使用到所以研究一下這裡

專案使用的是Maven  首先要在pom.xml中引入shiro依賴 <!-- shiro 許可權 --> <dependency> <groupId>org.apache.shiro</groupId> &

iOS開發讀取csv檔案

首先將csv檔案拖入到工程中 使用下面程式碼讀取檔案: -(void)readCSVData{     NSString *path = [[NSBundlemainBundle] pathForR

iOS開發點選介面空白處或點選背景收起鍵盤

在iOS開發中,我們會在UITextView、UITextField等控制元件裡編輯或者輸入文字結束後,需要關閉鍵盤。最經常的是,點選介面空白處或點選背景收起鍵盤。 通過在在viewDidLoad中新

iOS 開發tabBarItem不顯示文字顯示圖片且圖片居中顯示

//第一頁 HomePageViewController *homePageVC = [[HomePageViewControlleralloc] init]; UINavigationCon

iOS開發的併發、序列佇列同步、非同步任務

在多執行緒開發中我們經常會遇到這些概念:併發佇列、序列佇列、同步任務、非同步任務。我們將這四個概念進行組合會有四種結果:序列佇列+同步任務、序列佇列+非同步任務、併發佇列+同步任務、併發佇列+非同步任

ios 開發如何設定 uitabbar 裡面 tabbaritem 不顯示文字顯示圖片圖片垂直居中?

// 矯正TabBar圖片位置,使之垂直居中顯示  CGFloat offset = 5.0;  for (UITabBarItem *item in self.tabbar.items) {  item.imageInsets = UIEdgeInsetsMake(offset, 0, -offset,

ios開發讀取本地的plist檔案

-(NSArray *)imageData {     if(_imageData ==nil){//未初始化        //初始化資料 //NSBundle:一個NSBundle代表一個資料夾 //利用mainBundle就可以訪問手機裡面的任意資源 NSBundl

IOS開發SVN如何恢復到某一個版本(以Cornerstone為例)

Cornerstone是mac作業系統上一款比較流行的SVN版本管理工具。 如何恢復到某一版本呢? 1。選中你要恢復的工程 2.點選“Working Copy”--->>"Revert..."。 3. 選擇你要恢復的版本號,然後點選“Revert”。 4.

iOS開發調整view層級位置的兩個屬性

控制元件的層級關係和你加入到父檢視的順序有關,也就是先addsubview至父檢視的,層級越低,會被後加入的遮蓋。 可以通過以下函式改變子檢視的層級: 1.Objective-C版本: 將UIView顯示在最前面: - (void)bringSubvi

iOS開發應用內直接跳轉到Appstore評分

1.進入appstore中指定的應用     App Store 上評論的連結地址是 itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+

iOS的三大定時器 iOS開發定時器經常會用到iOS常用的定時器有三種分別是NSTimeCADisplayLink和GCD。

iOS開發中定時器經常會用到,iOS中常用的定時器有三種,分別是NSTime,CADisplayLink和GCD。 NSTimer 方式1 // 建立定時器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target: