第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何強制NSLocalizedString使用特定語言

如何強制NSLocalizedString使用特定語言

iOS
桃花長相依 2019-06-03 16:22:31
如何強制NSLocalizedString使用特定語言在iPhone上NSLocalizedString返回iPhone語言中的字符串。有沒有可能強迫NSLocalizedString使用一種特定的語言使應用程序使用與設備不同的語言?
查看完整描述

4 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

請勿在iOS 9上使用。這將對通過它傳遞的所有字符串返回零。


我找到了另一個解決方案,允許您更新語言字符串,w/o重新啟動應用程序,并與genstring兼容:


將這個宏放在前綴中.pch:


#define currentLanguageBundle [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[[NSLocale preferredLanguages] objectAtIndex:0] ofType:@"lproj"]]

在任何需要本地化字符串的地方:


NSLocalizedStringFromTableInBundle(@"GalleryTitleKey", nil, currentLanguageBundle, @"")

設置語言使用:


[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"de"] forKey:@"AppleLanguages"];

即使在連續(xù)的語言跳躍中也能工作,例如:


NSLog(@"test %@", NSLocalizedStringFromTableInBundle(@"NewKey", nil, currentLanguageBundle, @""));

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"fr"] forKey:@"AppleLanguages"];

NSLog(@"test %@", NSLocalizedStringFromTableInBundle(@"NewKey", nil, currentLanguageBundle, @""));

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"it"] forKey:@"AppleLanguages"];

NSLog(@"test %@", NSLocalizedStringFromTableInBundle(@"NewKey", nil, currentLanguageBundle, @""));

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"de"] forKey:@"AppleLanguages"];

NSLog(@"test %@", NSLocalizedStringFromTableInBundle(@"NewKey", nil, currentLanguageBundle, @""));


查看完整回答
反對 回復 2019-06-03
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

NSLocalizedString()中的“AppleLanguage”鍵(及其變體)NSUserDefaults若要確定用戶對首選語言的設置,請執(zhí)行以下操作。這將返回一個語言代碼數(shù)組,第一個代碼是用戶為其手機設置的代碼,如果資源在首選語言中不可用,則返回后續(xù)代碼作為后備。(在桌面上,用戶可以使用系統(tǒng)首選項中的自定義順序指定多種語言)

如果您愿意,可以通過使用setObject:Forkey:Method設置您自己的語言列表來覆蓋您自己的應用程序的全局設置。這將優(yōu)先于全局設置值,并返回到正在執(zhí)行本地化的應用程序中的任何代碼。用于此的代碼如下所示:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize]; //to make the change immediate

這將使德語成為您的應用程序的首選語言,以英語和法語作為后盾。您可能希望在應用程序啟動的早期就將其命名為此。您可以在這里閱讀更多關于語言/區(qū)域設置的首選項:國際化編程主題:獲取當前語言和地區(qū)


查看完整回答
反對 回復 2019-06-03
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

我最近也有同樣的問題,我不想開始修補我的整個NSLocalizedString也不強迫應用程序重新啟動,以使新語言工作。我希望一切都能按原樣運作。

我的解決方案是動態(tài)更改主包的類并在那里加載適當?shù)陌?/trans>

頭文件

@interface NSBundle (Language)+(void)setLanguage:(NSString*)language;@end

實施

#import <objc/runtime.h>static const 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 mainBundle] 
    pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}@end

因此,基本上,當應用程序啟動時,在加載第一個控制器之前,只需調用:

[NSBundle setLanguage:@"en"];

當用戶在設置屏幕上更改其首選語言時,只需再次調用它:

[NSBundle setLanguage:@"fr"];

若要重置為系統(tǒng)默認值,只需傳遞0:

[NSBundle setLanguage:nil];

好好享受.。

對于那些需要SWIFT版本的人:

var bundleKey: UInt8 = 0class AnyLanguageBundle: Bundle {

    override func localizedString(forKey key: String,
                                  value: String?,
                                  table tableName: String?) -> String {

        guard let path = objc_getAssociatedObject(self, &bundleKey) as? String,
              let bundle = Bundle(path: path) else {

            return super.localizedString(forKey: key, value: value, table: tableName)
            }

        return bundle.localizedString(forKey: key, value: value, table: tableName)
    }}extension Bundle {

    class func setLanguage(_ language: String) {

        defer {

            object_setClass(Bundle.main, AnyLanguageBundle.self)
        }

        objc_setAssociatedObject(Bundle.main, &bundleKey,    Bundle.main.path(forResource: language, ofType: "lproj"), 
        .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }}


查看完整回答
反對 回復 2019-06-03
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

我通常是這樣做的,但是您必須在您的項目中擁有所有的本地化文件。

@implementation Languagestatic NSBundle *bundle = nil;+(void)initialize 
{
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    NSArray* languages = [defs objectForKey:@"AppleLanguages"];
    NSString *current = [[languages objectAtIndex:0] retain];
    [self setLanguage:current];}/*
  example calls:
    [Language setLanguage:@"it"];
    [Language setLanguage:@"de"];
*/+(void)setLanguage:(NSString *)l{
    NSLog(@"preferredLang: %@", l);
    NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
    bundle = [[NSBundle bundleWithPath:path] retain];}+(NSString *)get:(NSString *)key alter:(NSString *)alternate 
{
    return [bundle localizedStringForKey:key value:alternate table:nil];}@end


查看完整回答
反對 回復 2019-06-03
  • 4 回答
  • 0 關注
  • 1201 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號