热门标签 | 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


推荐阅读
  • 在 `UITableViewController` 中采用简洁的平面样式布局时,可以通过优化代码实现单元格扩展至屏幕边缘的效果,同时确保节标题以分组样式呈现,从而提升用户体验和界面美观度。通过这种方式,可以更好地组织和展示列表内容,使其更加清晰和有序。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
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社区 版权所有