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
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(&onceToken, ^{
object_setClass([NSBundle mainBundle], [BundleEx class]);
});
objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] :nil,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
然後,在AppDelegate.m中匯入#import"NSBundle+Language.h"
在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中新增程式碼
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"myLanguage"] && ![[[NSUserDefaults standardUserDefaults] objectForKey:@"myLanguage"] isEqualToString:@""]) {
[NSBundle setLanguage:[[NSUserDefaults standardUserDefaults] objectForKey:@"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中常用的定時器有三種,分別是NSTime,CADisplayLink和GCD。
iOS開發中定時器經常會用到,iOS中常用的定時器有三種,分別是NSTime,CADisplayLink和GCD。 NSTimer 方式1 // 建立定時器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target: