zoukankan      html  css  js  c++  java
  • [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 应用程序内部国际化,不尾随系统语言

  • 相关阅读:
    导出数据到Excel
    VB中导入数据到Excel内容换行
    上传附件导入,确认弹框取消后,无法上传附件
    扫描审核,出错声音报警
    C语言中,隐藏结构体的细节
    C语言 符号的不同意义
    IAR 和 keil 使用外部 SDRAM 的区别
    C语言 ringBuffer 实现
    C语言 malloc 内存泄漏
    STM32 硬件CRC和软件CRC速度比较
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6915143.html
Copyright © 2011-2022 走看看