zoukankan      html  css  js  c++  java
  • [IOS]使用genstrings和NSLocalizedString实现App文本的本地化

    App本地化的需要不用讲大家也都明白,本文将介绍一种简单的方法来实现字符串的本地化。

    在不考虑本地化的情况下,我们如果在代码中给一个Button定义title,一般会这样写:

    btn.titleLable.text = @"Example Button";

    也许我们已经写了很长的代码才考虑到本地化的问题,大可不必头疼,这时候,我们要做的是把代码从头扫一遍,然后把每个会显示给用户看的字符串做如下修改:
    (对于内部使用的字符串就用不着本地化了)

    btn.titleLable.text = NSLocalizedString(@"btn_title", nil);

    NSLocalizedString是一个定义在NSBundle.h中的宏,其用途是寻找当前系统语言对应的Localizable.strings文件中的某个key的值。
    第一个参数是key的名字,第二个参数是对这个“键值对”的注释,在用genstrings工具生成Localizable.strings文件时会自动加上去。

    到目前为止,我们还没有生成Localizable.strings文件。这是一个逆向的过程,也就是先写好调用过程,再生成strings资源文件。

    当我们把所有的.m文件都修发好了,就该genstrings工具出场了。
      1. 启动终端,进入工程所在目录。
      2. 新建两个目录,推荐放在资源目录下。
        目录名会作用到Localizable.strings文件对应的语言,不能写错了。这里zh-Hans指简体中文,注意不能用zh.lproj表示。

    mkdir zh-Hans.lproj
    mkdir en.lproj

      3. 生成Localizable.strings文件

    genstrings -o zh-Hans.lproj *.m
    genstrings -o en.lproj *.m

      -o <文件夹>,指定生成的Localizable.strings文件放置的目录。
      *.m,扫描所有的.m文件。这里支持的文件还包括.h, .java等。

      4. 右键点击工程的Resources目录,选择“New Group”,添加两个目录zh-Hans.lproj和en.lproj。
      5. 在新建的group中添加刚刚生成的Localizable.strings文件。
      6. 最后在Localizable.strings文件中,修改每个key所对应的内容,就大功告成了。

    说了一大堆,其实操作起来还是很简单的,总的来讲就是两条:
      1. 在代码里用NSLocalizedString获取要本地化的字符串
      2. 用genstrings扫描代码文件,生成Localizable.strings,然后加到工程中。 

    最后祝大家的产品早日走向世界。

  • 相关阅读:
    LeetCode Power of Three
    LeetCode Nim Game
    LeetCode,ugly number
    LeetCode Binary Tree Paths
    LeetCode Word Pattern
    LeetCode Bulls and Cows
    LeeCode Odd Even Linked List
    LeetCode twoSum
    549. Binary Tree Longest Consecutive Sequence II
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/every2003/p/2407253.html
Copyright © 2011-2022 走看看