代码中字符串的本地化

  • 所谓字符串本地化,就是指App内的字符串在不同的语言环境下显示不同的内容。
  • 比如,"主页"这个字符串在中文语言环境下显示“主页”,在英语环境下显示“home”。下面就开始进行字符串本地化。
  • 其实字符本地化和App名称本地化过程如出一辙,只是创建的文件名成不一样(连同后缀一起,文件名必须是Localizable.strings),其他步骤完全相同。
  • 为了能够让大家彻底了解,此处还是会把步骤一一贴出来。

1、准备操作流程

  • 1.1 创建

    • 和应用名称本地化一样,首先需要command + N,选择iOS -> Resource -> Strings File
  • 1.2 命名要求

    • 文件名必须命名为Localizable
    • 备注:因本人电脑取消隐藏文件后缀名,所以会自动补全.strings后缀名。
  • 1.3 创建结果

    • 文件创建成功,查看Xcode左侧导航列表,发现多了一个名为Localizable.strings的文件,如下图:
  • 1.4 选择需要本地化的语言

    • 选中Localizable.strings文件,在Xcode的File inspection中点击Localize,目的是选择我们需要本地化的语言(和本地化App名称同理),如下图:
    • 依次选择English->Localize,如下图:
  • 1.5 选择我们需要本地化的语言

    • 然后勾选French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下图:
    • 然后我们发现Xcode右侧的File inspection变成了下图的样式:
  • 1.6 配置结果

    • 此时,Xcode左侧的Localizable.stirings左侧多了一个箭头,展开后,如下图所示:

2、开始国际化

  • 2.1 然后我们只需要在Localizable.strings下对应的文件中,分别以Key-Value的形式,为代码中每一个需要本地化的字符串赋值,如下图:

    • 英语
    • 法语
    • 简体中文
    • 繁体中文
    • 韩语
  • 2.2 使用

    • 本地化代码中的字符串,如下图:
    • 我们只需要使用Foundation框架自带的NSLocalizedString(key, comment)这个宏根据Key获取对应的字符串,然后赋值给代码中的字符串。
    // NSLocalizedString(key, comment) 本质
    // NSlocalizeString 第一个参数是内容,根据第一个参数去对应语言的文件中取对应的字符串,第二个参数将会转化为字符串文件里的注释,可以传nil,也可以传空字符串@""。

3、国际化结果

  • 不同语言环境下运行效果,如下图:
  • 英语环境下:

  • 法语环境下:

  • 简体中文环境下:

  • 繁体中文环境下:

  • 韩语环境下:

  • 如此一来,我们就实现了代码中字符串的本地化。

4、技巧

  • 其实,我们不需要给Localizable.strings(English)文件添加Key-Value。
  • 原因如下:系统根据某个key去获取对应的字符串时,如果没有找到,那么就会以key作为value返回。
  • 所以如果我们在Localizable.strings(English)文件中没有添加 click = "hit";那么在english环境下btn最终显示的title会是click.
  • 切换语言无需在模拟器中设置,只需要在Xcode中进行如下设置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (语言代码)。
  • 例如,我们模拟器此时虽然是韩语,如果通过上述步骤设置为zh-Hans,那么语言环境将会变为汉语,如下图:

  • 运行效果:
  • 如此一来,切换语言变得更加简单,无需在模拟器的设置中进行繁琐的语言切换。

原文地址:https://www.cnblogs.com/CH520/p/9388017.html

时间: 2024-10-08 06:06:40

代码中字符串的本地化的相关文章

在使用<script>嵌入JavaScript代码时,不要在代码中的任何地方出现"</script>"字符串

在使用<script>嵌入JavaScript代码时,记住不要在代码中的任何地方出现"</script>"字符串.例如浏览器执行下面代码会报错: <script type="text/javascript"> function sayHello() { console.log("</script>"); } </script> 浏览器会报以下错误:Uncaught SyntaxError

在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串

  1.在<connectionStrings> 标签里添加连接 <connectionStrings> <add name="ConnectionName" connectionString="Server=.\SQLEXPRESS;Database=DatabaseName;UserID=sa;Password=abc123" providerName="System.Data.SqlClient" />

直接从代码中复制的字符串放到txt中不可直接作为连接字符串

以下是直接从代码中复制出来的 Data Source=192.168.2.1\\SQLEXPRESS;Initial Catalog=DesignSystem;Persist Security Info=True;User ID=sa;Password=******** 而正确的应该是 Data Source=192.168.2.1\SQLEXPRESS;Initial Catalog=DesignSystem;Persist Security Info=True;User ID=sa;Pass

判断输入中字符串长度的代码

//判断输入文本中字符串的长度 if ([self convertToInt:chooseRollTextField.text] > 20) { [self showToast:@"输入的角色名不能超过20个汉字或40个字符哦!"]; return; } - (int)convertToInt:(NSString*)strtemp { int strlength = 0; char* p = (char*)[strtemp cStringUsingEncoding:NSUnico

【WinRT】使用 T4 模板简化字符串的本地化

在 WinRT 中,对控件.甚至图片资源的本地化都是极其方便的,之前我在博客中也介绍过如何本地化应用名称:http://www.cnblogs.com/h82258652/p/4292157.html 关于 WinRT 中的本地化,CodeProject 上有一篇十分值得大家一看的文章:http://www.codeproject.com/Articles/862152/Localization-in-Windows-Universal-Apps 大家可以去仔细学习一下. 以前的本地化: 说回重

关于C++代码中的#pragma预处理指令

预处理指令是指在编译器编译代码时,提供按条件跳过源文件中的代码段(节).报告错误(错误信息以及行号)和警告条件,以及描绘源代码的不同区域的能力. 总是占用源代码中的单独一行,并且总是以 # 字符和预处理指令名称开头.# 字符的前面以及 # 字符与指令名称之间可以出现空白符. 下面是可用的预处理指令: #define 和 #undef,分别用于定义和取消定义条件编译符号. #if.#elif.#else 和 #endif,用于按条件跳过源代码中的节. #line,用于控制行号(在发布错误和警告信息

Java中字符串对象

Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是字面量的方式.然而这两种实现其实存在着一些性能和内存占用的差别.这一切都是源于JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池. 工作原理 当代码中出现字

Ado.Net实体数据模型EF,如何在代码中添加数据库连接密码

在创建EF模型的时候,VS2013提示说“在连接字符串中存储敏感数据可能有安全风险”,于是我选择了在代码中添加,可是如何通过代码添加呢? 我在网上百度了下,没有人说的清楚直观. 假设我们创建了一个名字是“mytest”的实体数据模型,那么在项目中就会生成一个mytest.emdx,我们展开它mytest.emdx -> mytest.Context.tt -> mytest.Context.cs 在这个cs文件中我们能够看到一个构造函数,假设你的数据库名称是mydb,它的类名就是mydbEnt

javascript中字符串格式转化成json对象记录

什么是JSON JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法.JSON也是一种轻量级数据交换格式.JSON非常易于人阅读与编写,同时利于机器解析与生成.JSON是在AJAX中代替XML交换数据的更佳方案. JSON格式与语法 var jsonobject= {         //对象内的属性语法(属性名与属性值是成对出现的)         propertyname:value, //对象内的函数语法(函数名与函数内容是成对出现的