• [iOS]怎样在iOS开发中切换显示语言实现国际化


    1.在Project设置,加入中英两种语言:




    2.新建Localizable.strings文件,作为多语言相应的词典,存储多种语言,点击右側Localization,勾选中英:



    3.加入一个字段,

    在English中,加入:"SUBMIT_BTN_TITLE" = "Go";

    在Chinese中,加入:"SUBMIT_BTN_TITLE" = "開始";

    4.一个工具类GDLocalizableController。用来切换本地语言:
    //
    //  GDLocalizableController.h
    //  guide-book
    //
    //  Created by why on 7/16/14.
    //  Copyright (c) 2014 why. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface GDLocalizableController : NSObject
    
    +(NSBundle *)bundle;//获取当前资源文件
    
    +(void)initUserLanguage;//初始化语言文件
    
    +(NSString *)userLanguage;//获取应用当前语言
    
    +(void)setUserlanguage:(NSString *)language;//设置当前语言
    
    @end
    
    
    
    
    
    
    //
    //  GDLocalizableController.m
    //  guide-book
    //
    //  Created by why on 7/16/14.
    //  Copyright (c) 2014 why. All rights reserved.
    //
    
    #import "GDLocalizableController.h"
    
    @implementation GDLocalizableController
    
    static NSBundle *bundle = nil;
    
    + ( NSBundle * )bundle{
        return bundle;
    }
    +(void)initUserLanguage{
        
        NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
        NSString *string = [def valueForKey:@"userLanguage"];
        if(string.length == 0){
            //获取系统当前语言版本号
            NSArray* languages = [def objectForKey:@"AppleLanguages"];
            NSString *current = [languages objectAtIndex:0];
            string = current;
            [def setValue:current forKey:@"userLanguage"];
            [def synchronize];//持久化。不加的话不会保存
        }
        
        //获取文件路径
        NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@"lproj"];
        bundle = [NSBundle bundleWithPath:path];//生成bundle
    }
    
    +(NSString *)userLanguage{
        
        NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
        NSString *language = [def valueForKey:@"userLanguage"];
        return language;
    }
    
    +(void)setUserlanguage:(NSString *)language{
        
        NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
        
        //1.第一步改变bundle的值
        NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj" ];
        bundle = [NSBundle bundleWithPath:path];
        
        //2.持久化
        [def setValue:language forKey:@"userLanguage"];
        [def synchronize];
    }
    
    @end




    5. 自己定义一个宏方便处理:

    // ----- 多语言设置
    #define CHINESE @"zh-Hans"
    #define ENGLISH @"en"
    #define GDLocalizedString(key) [[GDLocalizableController bundle] localizedStringForKey:(key) value:@"" table:nil]
    

    6.使用:

        [GDLocalizableController setUserlanguage:CHINESE];
        NSLog(GDLocalizedString(@"SUBMIT_BTN_TITLE"));
        [GDLocalizableController setUserlanguage:ENGLISH];
        NSLog(GDLocalizedString(@"SUBMIT_BTN_TITLE"));




    參考资料:iOS 应用程序内部国际化,不尾随系统语言

  • 相关阅读:
    JSP中出现According to TLD or attribute directive in tag file, attribute value does not accept any expressions(转贴)
    加密的故事(转载)
    Tomcat6.0.13下配置Tomcat Administration Web Application(转贴)
    颠覆传统面向对象的设计思想(神仙?妖怪?)
    颠覆传统面向对象的设计思想(序章续)
    技术人员应该阅读的图书(转载)
    一段代码重构引起的争议(一)
    43条网页设计中常犯的错误总结(转帖)
    通过分区(Partition)提升MySQL性能
    QeePHP继承视图
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6915143.html
Copyright © 2020-2023  润新知