• iOS,本地化(国际化)字符


    iOS字符本地化(国际化)

    1.本地化资源库

    1.1.新建Bundle作为本地化资源库

     

    1.2.将本地化资源库改成如下

     

    1.3.配置各个语言的本地字符(Localizable.strings)资源

    //只能在顶部注释,不要在每一列后面注释,会读取失败导致app崩溃

    //英语
    "Group" = "Group";
    "Name" = "Name";
    //简体中文
    "Group" = "群组";
    "Name" = "一线天";
    //繁体中文
    "Group" = "群組";
    "Name" = "壹線天";

    2.处理本地转换扩展

    2.1.新建Bundle扩展类

     

     

    2.2.实现NSBundle分类方法

    //NSBundle+LocalizationString.h文件

     

    //
    //  NSBundle+LocalizationString.h
    //  LocalizationStringTest
    //
    //  Created by Vie on 2017/1/20.
    //  Copyright © 2017年 Vie. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface NSBundle (LocalizationString)
    
    
    /**
     根据系统语言返回本地化字符
    
     @param key 字符key
     @return 本地化字符
     */
    +(NSString *)localizationStringForKey:(NSString *)key;
    @end

     

    //  NSBundle+LocalizationString.m文件

     

    //
    //  NSBundle+LocalizationString.m
    //  LocalizationStringTest
    //
    //  Created by Vie on 2017/1/20.
    //  Copyright © 2017年 Vie. All rights reserved.
    //
    
    #import "NSBundle+LocalizationString.h"
    
    @implementation NSBundle (LocalizationString)
    /**
     根据系统语言返回本地化字符
     
     @param key 字符key
     @return 本地化字符
     */
    +(NSString *)localizationStringForKey:(NSString *)key{
     static NSBundle const *bundle=nil;
        if (bundle==nil) {
            // (iOS获取的语言字符串比较不稳定)目前框架只处理en、zh-Hans、zh-Hant三种情况,其他按照系统默认处理
            NSString *language = [NSLocale preferredLanguages].firstObject;
            if ([language hasPrefix:@"en"]) {
                language = @"en";
            } else if ([language hasPrefix:@"zh"]) {
                if ([language rangeOfString:@"Hans"].location != NSNotFound) {
                    language = @"zh-Hans"; // 简体中文
                } else { // zh-Hantzh-HKzh-TW
                    language = @"zh-Hant"; // 繁體中文
                }
            } else {
                language = @"zh-Hans";
            }
            //初始化资源
            bundle=[NSBundle bundleWithPath:[[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"LocalizationString" ofType:@"bundle"]] pathForResource:language ofType:@"lproj"]];
        }
        return [bundle localizedStringForKey:key value:nil table:nil];
    }
    @end

     

    3.本地化字符key

    3.1.本地化字符key实现

    //  LocalizationKey.h文件

    //
    //  LocalizationKey.h
    //  LocalizationStringTest
    //  本地化字符key列表
    //  Created by Vie on 2017/1/20.
    //  Copyright © 2017年 Vie. All rights reserved.
    //
    
    #define Group   @"Group"
    #define Name    @"Name"

     

    4.使用

    #import "NSBundle+LocalizationString.h"
    #import "LocalizationKey.h"
    
    
     
    NSLog(@"%@|%@",[NSBundle localizationStringForKey:Group],[NSBundle localizationStringForKey:Name]);

    //运行结果

    2017-02-16 11:18:48.589 LocalizationStringTest[11190:1861472] 群组|一线天
  • 相关阅读:
    为什么32位系统最大支持4G内存??我自己悟出来了 终于 。。。。。
    关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门 &&& 关于指针的迷惑,我自己问的.
    关于多态的理解,有助于理解TStream抽象类的多态机制。
    FP-Tree频繁模式树算法
    FP-Tree频繁模式树算法
    分布式系统阅读笔记(二十一)-----分布式系统设计(Google Case Study)
    分布式系统阅读笔记(二十一)-----分布式系统设计(Google Case Study)
    分布式系统阅读笔记(二十一)-----分布式系统设计(Google Case Study)
    链接挖掘算法之PageRank算法和HITS算法
    链接挖掘算法之PageRank算法和HITS算法
  • 原文地址:https://www.cnblogs.com/douniwanxia/p/6322870.html
Copyright © 2020-2023  润新知