热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS国际化(多语言)

iOS国际化(多语言)-在iOS中,是通过“xxx.lproj”目录来定义每个语言的资源。这里的资源可以是图片、文本、Storyboard、Xib等等。iOS国际化,亦即:(支持

在iOS中,是通过“xxx.lproj”目录来定义每个语言的资源。这里的资源可以是图片、文本、Storyboard、Xib等等。

iOS国际化,亦即:(支持)多语言。 核心思想:为所需要的各种语言单独定义一份资源。

应用程序国际化

应用程序国际化,即APP国际化。

  • 1.创建工程,再在“PROJECT”的“Info”里面,添加所需语言。

添加?语成功后,Main.storyboard和LaunchScreen.storyboard相应的改变。应用展示的所有文本都是以硬编码字符串存在于Main.storyboard及ViewController里面。

  • 2.从代码中分离出文本:创建一个 “.strings” 扩展名的文件

来本地化字符串,需要把这些字符串全部放在一个单独的文件中。它将会在包中简单地引用这些字符串,而不是在实现、使用的方法中进行硬编码。 Xcode使用带有 “.strings” 扩展名的文件来存储和检索 程序中使用的所有字符串,以及支持的每种语言。根据iOS设备当前所使用的语言,在代码中一个简单的方法调用将会查找并返回符合设备语言要求的字符串。 点击右键,选择“New File…”,选择“iOS”对应的“Resource”中的“Strings File”,如图:

点击“Next”,为文件命名为InfoPlist.strings,然后点击“save”。

  • 3.创建完“InfoPlist.strings”(命名随意~),工程目录结构文件如下,单击“InfoPlist.strings”,查看右边的属性,在Localizable栏添加语言。如图:

这个时候就可以在对应语言的“InfoPlist.strings”文件中,添加所支持的字符串了。(当然针对你的APP客户的国籍,翻译出所对应语言正确的字符串!!考验你和“外贸”关系的时候到了。。。?????)

  • 4.运行,看效果:

内容国际化

程序字符串国际化。

  • 1.创建一个“Localizable.strings” 文件(点击右键,选择“New File…”,选择“iOS”对应的“Resource”中的“Strings File”)。

注意:Localizable.strings 是系统默认名字。不能更改,如果看不顺眼!!有个解决的办法:在⭐️“.pch”文件⭐️里面,使用⭐️宏定义⭐️重新定义为一个别的名字!

  • 2.添加语言在Localization.strings 中,按照"key" = "value"的格式。在使用时,用NSLocalizedString(@"key", @"")读取内容。

Localization.strings (English)文件中,添加:

  "第一!绝对不意气用事!" = "The first!Absolutely not impulsive!";
  "第二!绝对不漏判任何一件坏事!" = "The second!Definitely not missing any bad thing!";
  "第三!绝对裁判的公正漂亮!" = "The third!Absolutely the referee just beautiful!";

Localization.strings (Chinese)文件中,添加:

  "第一!绝对不意气用事!" = "第一!绝对不意气用事!";
  "第二!绝对不漏判任何一件坏事!" = "第二!绝对不漏判任何一件坏事!";
  "第三!绝对裁判的公正漂亮!" = "第三!绝对裁判的公正漂亮!";

视图控制器中,调用的语句:

  NSString * label_Str1 = NSLocalizedString(@"第一!绝对不意气用事!", nil);
  NSString * label_Str2 = NSLocalizedString(@"第二!绝对不漏判任何一件坏事!", nil);
  NSString * label_Str3 = NSLocalizedString(@"第三!绝对裁判的公正漂亮!", nil);
  NSString * label_Str = [NSString stringWithFormat:@"%@\n%@\n%@",label_Str1,label_Str2,label_Str3];

  UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(10, 240, self.view.frame.size.width, 120.f)];
  label.text = label_Str;
  //自动换行
  label.numberOfLines = 0;
  [self.view addSubview:label];
  • 3.运行,看效果:

#####优化: 在pch头文件中,定义一个国际化对应的宏!

 //宏定义国际化字符
 #define INTERNATIONAL
 #ifdef INTERNATIONAL
 #define INTER_STR(a)   (NSLocalizedString(a, nil))
 #else
 #define INTER_STR(a)   (a)
 #endif

使用:

 NSString * label_Str1 = INTERSTR(@"第一!绝对不意气用事!");

#####判断支持的语言、当前语言:

NSArray *languages = [NSLocale preferredLanguages];       
NSLog(@"支持的languages:%@",languages);

NSString *currentLanguage = [languages objectAtIndex:0];
NSLog(@"当前语言currentLanguage:%@",currentLanguage); //日语:ja-CN、法语:fr-CN、fr-CA

格式:zh-Hans-US zh-Hans:(语言)简体中文、US:(地区)美国

######判断当前语言是否是“日语”:

NSString * judge_str = [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0];//首位
if ([judge_str isEqualToString:@"ja"]) {//是“日语”
   
} 

或者:针对多个“-”的情况

if ([currentLanguage containString:@""]) { //是“日语”
    
}

添加?语完毕!!! 哎~~晚安!!!

goyohol's essay


推荐阅读
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
author-avatar
手机用户2702934510
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有