`

iOS开发那些事-iOS应用本地化-文本信息本地化

阅读更多

文本信息本地化在本地化工作中占有很大的比例。包括了:应用名称本地化、系统按钮和信息本地化,以及静态文本信息本地化。

系统按钮和信息本地化

还记得天气预报应用背后的“完成”按钮吗,它在中文环境下是“完成”,在英语环境下是“Done”。

还有一些系统给我们的提示信息,连接蓝牙设备时的系统提示。它在中文环境下是中文提示,在英语环境下是英文提示。

系统按钮上的文本和系统提示信息的文字我们都是不能修改的,但是如果我们不进行本地化的设置,即便是这些基本信息也一直都是英文显示。我们可以尝试在故事板中创建画面,在导航栏中放置两个系统按钮Done和Edit。然后分别在英文和中文环境下运行看看是否有变化。

事实上,它们一直都没有变化,这是什么原因?原因在于我们没有对工程本进行地化设置,打开工程中的PROJECT选择L10N,点击Localizations下面“+”,弹出菜单选择“Chinese(zh-Hans)”,这样就添加了简体中文本地化文件。

这样我们的工程就同时支持中文和英文的本地化了,系统按钮和提示信息等也都已经实现本地化了,这个过程不需要编写代码。

应用名称本地化

应用程序名称本地化是一个很重要的问题,左图是中文语言环境下的iPod touch桌面,右图是英文语言环境下的iPod touch桌面。我们会看到日历、地图、股市等几个应用名称都有本地化。

我 们要编写一个应用它的英文名是:“Localization”,中文名是:“本地化”。打开工程L10N应用,找到工程中的L10N- Info.plist文件,该文件是工程属性文件,应用程序名称就是在这个文件中定义的,但是我们不能在这里本地化,要想本地化必须借助于另一个文件 InfoPlist.strings,InfoPlist.strings是可以本地化的。在上一节系统按钮和信息本地化 后,InfoPlist.strings下面会有两个文件:InfoPlist.strings(English)和 InfoPlist.strings(Chinese)。打开Finder看到en.lproj和zh-Hans.lproj,它们的目录结构如下:

├── en.lproj

│   ├── InfoPlist.strings

│   └── MainStoryboard.storyboard

└── zh-Hans.lproj

    ├── InfoPlist.strings

    └── MainStoryboard.storyboard

CFBundleDisplayName和CFBundleName的键能够配置应用名字,CFBundleDisplayName键配置应用显示的名字。CFBundleName配置应用短名字,不超过16字符,显示菜单栏和应用窗口信息中。

InfoPlist.strings(Chinese)文件的内容如下:

CFBundleDisplayName="本地化";

CFBundleName="本地化"; 

InfoPlist.strings(English)文件的内容如下:

CFBundleDisplayName="Localization";

CFBundleName="L10N";

运行结果,图标下文字显示的是CFBundleDisplayName键配置的名字。

程序代码输出的静态文本本地化

应 用中的静态文本都应该实现本地化,但是它们可能是通过程序代码输出,也可能是通过IB在nib或故事板设计输出的。采用 “Tabbed Application”工程模板创建的标签应用程序,它的两个标签上的标题First和Second,以及画面中的文字都属于静态文 本。

同 样都是这个工程如果在创建过程中分别创建基于故事板和nib技术的两个版本,故事板版本的两个标签上的标题是通过IB在编写在故事板文件中的(关于故事板 和nib中静态文本的本地化我们会在下一节介绍)。但在nib版本中两个标签上的标题通过程序代码输出的。FirstViewController.m中 的构造方法:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        self.title = NSLocalizedString(@"First", @"First");

        self.tabBarItem.image = [UIImage imageNamed:@"first"];

    }

    return self;

}

SecondViewController.m中的构造方法:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        self.title = NSLocalizedString(@"Second", @"Second");

        self.tabBarItem.image = [UIImage imageNamed:@"second"];

    }

    return self;

}

在 这个两个构造方法中设置标题属性的时候使用了NSLocalizedString宏,NSLocalizedString宏本质上是调用NSBundle 的localizedStringForKey:value:table:方法,NSLocalizedString是从默认字符串资源文件 (Localizable.strings)中取出本地化的字符串。

字符串资源文件默认命名为Localizable.strings,文 件采用UTF-16编码。如果静态文本不是很多可以自己创建Localizable.strings文件。选择“Supporting Files”组, 打开菜单File→New→File…,选择iOS→Resource→String File,输入文件名 “Localizable.strings”。

选择文件Localizable.strings打开文件显示检查器,点击Localization中的“Make localized”按钮,这可以帮助我们创建本地化的Localizable.strings文件。

点击“Make localized”按钮弹出一个选择本地化语言的对话框。我们可以选择English,然后点击Localize按钮。

然后再按照事实上,添加简体中文本地化文件

英文版中Localizable.strings文件中添加内容:

/* First */

"First" = "First";

/* Second */

"Second" = "Second";

中文版中Localizable.strings文件中添加内容:

/* First */

"First" = "第一";

/* Second */

"Second" = "第二";

使用genstring工具

但是有的时候字符串很多,提取和编写起来很麻烦,此时我们可以借助于命令行工具genstring,从m或mm文件中扫描下面宏,并取出字符串输出到本地化文件中。

CFCopyLocalizedString

CFCopyLocalizedStringFromTable

CFCopyLocalizedStringFromTableInBundle

CFCopyLocalizedStringWithDefaultValue

NSLocalizedString

NSLocalizedStringFromTable

NSLocalizedStringFromTableInBundle

NSLocalizedStringWithDefaultValue

CF 开头宏和NS开头宏两两对应,NS开头宏是Foundation 框架是基于Objective-C语言的,CF开头宏是 Core Foundation 框架是基于c语言的。NSLocalizedStringFromTable和 NSLocalizedStringFromTableInBundle函数是在自定义字符串资源文件名时使用。

下面是genstrings命名的基本语法:

genstrings [-a] [-q] [-o <outputDir>] sourcefile

其中参数:

-a  在存在的文件后面追加内容

-q  关闭多个键/值对的警告

-o  指定输出目录

因此如果我们想输出到en.lproj目录,则代码如下:

genstrings -o en.lproj  *.m

这样就在en.lproj目录下面产生了Localizable.strings文件,需要注意的是上面的命令每次运行的时候都会覆盖Localizable.strings文件,如果内容不想覆盖可以使用-a参数,然后在文件中进行修改。

分享到:
评论

相关推荐

    iOS开发进阶篇-成为iOS开发高手-源码

    - Cocoa Touch是iOS应用开发的基础,包括UIKit、Core Animation等组件,用于创建用户界面和交互逻辑。 3. **ARC(Automatic Reference Counting)**: - 在Objective-C中,了解并熟练运用ARC能有效管理内存,防止...

    IOS应用源码Demo-本地化与国际化-毕设学习.zip

    在iOS应用开发中,本地化和国际化是两个关键的概念,它们对于构建能够适应全球不同地区和语言的应用至关重要。本资源“IOS应用源码Demo-本地化与国际化-毕设学习.zip”提供了一个实用的示例,帮助开发者了解并实践这...

    IOS应用源码Demo-新闻客户端应用-毕设学习.zip

    10. **国际化和本地化**:对于一个完整的应用,可能已经实现了多语言支持,通过InfoPlist.strings文件和Localizable.string文件进行文本翻译。 11. **测试和调试**:源码中可能包含了单元测试和集成测试代码,以...

    iOS应用程序本地化

    在iOS开发中,本地化(Localization)和国际化(Internationalization)是两个重要的概念,它们使得应用程序能够适应全球不同地区的用户需求。本地化是指将应用程序的内容、界面和功能适应特定地区的语言、文化和...

    location-cleaned 定位ios15.0 最新驱动-iOS专用

    例如,它可以模糊化用户的位置信息,使得第三方应用只能获取到大致的区域信息,而非精确坐标。同时,用户可以更加灵活地控制哪些应用可以访问他们的位置信息,以及何时访问。 3. 实时优化:location-cleaned驱动...

    IOS应用源码Demo-获取全球当前所有时区的当前时间TestTimeZone-毕设学习.zip

    8. **国际化和本地化**:考虑到全球用户,应用可能实现了国际化和本地化,使界面文本能适应不同语言。 9. **版本控制**:源码可能使用了Git进行版本控制,帮助团队协作和版本追踪。 10. **测试**:毕业设计通常会...

    ios-Swift版本的多国语言本地化--实现应用内切换.zip

    在iOS应用开发中,为了使应用能够适应全球用户,我们需要实现多国语言本地化。Swift作为苹果官方推荐的编程语言,提供了丰富的API和工具来帮助开发者实现这一功能。本教程将详细讲解如何在Swift项目中进行多国语言...

    ios程序本地化

    本文将详细介绍iOS应用程序的本地化方法,包括但不限于应用程序名称的本地化、XIB文件的本地化、字符串的本地化以及图片资源的本地化。 #### 二、本地化应用程序名称 应用程序名称的本地化对于提升用户体验至关...

    iOS开发基础教程-源代码.rar

    在iOS开发领域,掌握基础知识是构建高质量应用的关键。这个“iOS开发基础教程-源代码.rar”文件显然是一份教学资料,包含了一些基本的iOS应用程序开发的源代码示例。通过学习这些源代码,开发者可以更好地理解iOS...

    3分钟实现iOS语言本地化 - 国际化(图文详解) - CocoaChina_让移动开发更简单1

    iOS 语言本地化实现详解 本文将详细介绍如何在 3 分钟内实现 iOS 语言本地化,涵盖了国际化的概念、实现步骤和相关技术细节。 国际化概念 国际化是指使软件系统能够适应不同语言和地区的需求,使其能在全球范围内...

    IOS应用源码Demo-餐厅展示应用-毕设学习.zip

    总之,通过研究这个“餐厅展示应用”的源码,学生可以学习到iOS应用开发的多个方面,包括Swift编程、UI设计、网络编程、数据持久化、用户交互等,这对于提升iOS开发技能和理解实际项目流程大有裨益。

    IOS应用源码Demo-一个天气应用的完整例子-毕设学习.zip

    通过这个天气应用源码的学习,你可以深入理解iOS应用开发的全过程,从界面设计到后端数据处理,从网络通信到用户体验优化。这不仅有助于提升你的编程技能,也有助于理解和应对毕业设计或论文中的实际问题。

    IOS本地化数据

    本文将深入探讨iOS本地化的核心概念、实现方法以及如何在项目中进行实践。 首先,我们要理解什么是本地化(Localization)。本地化不仅仅是翻译,它包括了对软件界面、文本、图像、日期格式、货币符号等各方面的...

    iOS项目-object-c-仿网易新闻项目.zip

    在本项目"iOS项目-object-c-仿网易新闻项目.zip"中,我们主要关注的是一个使用Objective-C编程语言实现的iOS...通过深入研究这个项目,开发者能够提升自己的iOS应用开发技能,尤其是对于类似新闻阅读应用的设计和实现。

    IOS应用源码Demo-收音机-毕设学习.zip

    8. **本地化**:如果应用支持多种语言,需考虑如何实现语言切换。 9. **错误处理和调试**:良好的错误处理机制是任何应用必备的,确保程序在遇到问题时能够优雅地处理。 通过分析这个项目,学生可以学到如何集成...

    ios-cmake-master_ios-cmake-master_fallen2lc_

    1. **克隆项目**:首先,你需要从GitHub克隆"ios-cmake-master"到本地。 2. **配置CMake**:在项目根目录下创建CMakeLists.txt文件,定义你的源代码、库和目标。 3. **运行CMake**:使用CMake命令行工具,指定源码...

    IOS开发---JSON不同的四种解析方式

    在iOS应用开发中,我们需要将服务器返回的JSON数据转化为Objective-C对象,或者将本地的数据转换为JSON格式发送到服务器。本文将详细介绍四种常见的iOS JSON解析方式:TouchJSON、JSONKit、原生JSON以及SBJSON。 1....

    IOS应用源码Demo-地图上多个指针显示(一些本地化应用或社交应用可以用得到)-毕设学习.zip

    在iOS应用开发中,地图功能是非常重要的一部分,尤其在本地化应用和社交应用中更是不可或缺。这个名为"IOS应用源码Demo-地图上多个指针显示(一些本地化应用或社交应用可以用得到)-毕设学习.zip"的压缩包文件提供了...

    iOS-语言本地化

    iOS语言本地化是苹果开发平台为开发者提供的一种强大的功能,使得应用程序可以轻松适应不同国家和地区用户的语言需求。这一特性使得开发者能够为全球用户提供更加友好、个性化的使用体验,无需为每个语言版本创建...

Global site tag (gtag.js) - Google Analytics