【swift】让你的 App 轻松支持多语言
分类:
技术
简介:一、什么是本地化(Localization)本地化(Localization) 是指让应用程序能够根据用户的语言和地区自动显示相应的内容。例如:中文用户看到「登录」英文用户看到「Login」日语用户看到「ログイン」在 Swift / iOS 开发中,本地化字符串通常通过 NSLocalizedString 实现。二、NSLocalizedString 的基本用法最基础的语法如下:NSLocalizedString("Login", comment: "登录按钮标题")"Login" 是字符串键(key)"登录按钮标题" 是注释(供翻译人员理解使用,不会显示在界面上)系统会自动根据当前语言环境,在对应的 .strings 文件中查找该 key 的翻译。三、创建 Localizable.strings 文件在 Xcode 中选择:File → New → File → Strings File命名为 Localizable.strings选中文件 → 在右侧的 File Inspector 中点击 Localize...选择要支持的语言,例如:EnglishChinese (Simplified)Japanese这样 Xcode 会自动为每种语言生成一个对应目录:en.lproj/Localizable.strings
zh Hans.lproj/Localizable.strings
ja.lproj/Localizable.strings四、在 .strings 文件中添加内容示例:英文版 (en.lproj/Localizable.strings)"Login" = "Login";
"Email" = "Email";
"Password" = "Password";中文版 (zh Hans.lproj/Localizable.strings)"Login" = "登录";
"Email" = "邮箱";
"Password" = "密码";日文版 (ja.lproj/Localizable.strings)"Login" = "ログイン";
"Email" = "メール";
"Password" = "パスワード";五、在 Swift 中使用本地化字符串直接调用:Text(NSLocalizedString("Login", comment: "登录按钮标题"))或者用在控制器里:title = NSLocalizedString("Settings", comment: "设置页标题")六、优化写法:字符串扩展(推荐 ✅)在项目中频繁使用 NSLocalizedString 会显得冗长,我们可以通过 String 扩展 提供更简洁的写法:extension String {
/// 快速返回本地化后的字符串
var LocalizedStr: String {
return NSLocalizedString(self, comment: "")
}
}使用方式更优雅:Text("Login".LocalizedStr)
TextField("Email".LocalizedStr, text: $email)✨ 优点:代码更简洁可读性更高不需要重复填写注释参数七、带格式的本地化字符串有时我们需要插入变量,例如:let name = "小明"
Text(String(format: NSLocalizedString("Hello, %@!", comment: "问候语"), name)).strings 文件中对应:"Hello, %@!" = "你好,%@!";这样不同语言都能保持正确语法结构。八、支持动态语言切换(可选进阶)如果希望用户能在 App 内切换语言(不依赖系统设置),可以使用第三方库(如 Localize Swift)或自定义本地化管理器。例如:Localize.setCurrentLanguage("zh Hans")然后重新刷新视图即可。九、常见问题总结问题原因解决方法翻译没显示没有在对应 .lproj 文件添加 key检查字符串文件是否同步中文正常,英文不显示没设置英文语言资源在 Localizable.strings(en) 中补充内容注释出现在界面上写错了参数位置确保 comment 不在显示文本位置新增语言没生效没勾选 Localize 文件右键 Localizable.strings → Localize...🔚 十、总结Swift 本地化流程图:代码调用 → NSLocalizedString(key) → 查找系统语言目录 → 对应的 Localizable.strings → 返回翻译结果最佳实践:所有用户可见文字均通过 NSLocalizedString 处理;使用 .LocalizedStr 扩展简化调用;为每个字符串添加清晰注释;测试多语言切换场景,确保排版和长度兼容。
随机小姐姐
简介:示例
连续: 开
换一个
(function (window, document) {
if (top != self) {
window.top.location.replace(self.location.href);
}
var get = function (id) {
return document.getElementById(id);
}
var bind = function (element, event, callback) {
return element.addEventListener(event, callback);
}
var auto = true;
var player = get('player');
var randomm = function () {
player.src = 'http://v.nrzj.vip/video.php?_t=' + Math.random();
player.play();
}
bind(get('next1'), 'click', randomm);
bind(player, 'error', function () {
randomm();
});
bind(get('switch'), 'click', function () {
auto = !auto;
this.innerText = '连续: ' + (auto ? '开' : '关');
});
bind(player, 'ended', function () {
if (auto) randomm();
});
})(window, document);
var _hmt = _hmt || [];(function() {var hm = document.createElement("script");hm.src = "https://hm.baidu.com/hm.js?a8569fd6981018f096d774868306a054";var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})();
#switch,#next1{
background: #7F9CCC;
color:#fff;
line height:40px;
text align:center;
width:100px;
border:none;
margin:0 6px;
border radius:6px;
font weight:bold;
}
代码{hide}<div>
<section id="main">
<video id="player" src="http://v.nrzj.vip/video.php" controls="controls" width="100%" height="400px"></video>
</section>
</div>
<div style="text align: center;">
<section id="buttons">
<button id="switch">连续: 开</button>
<button id="next1">换一个</button>
</section>
</div>
<script src="https://hm.baidu.com/hm.js?a8569fd6981018f096d774868306a054
<script>
(function (window, document) {
if (top != self) {
window.top.location.replace(self.location.href);
}
var get = function (id) {
return document.getElementById(id);
}
var bind = function (element, event, callback) {
return element.addEventListener(event, callback);
}
var auto = true;
var player = get('player');
var randomm = function () {
player.src = 'http://v.nrzj.vip/video.php?_t=' + Math.random();
player.play();
}
bind(get('next1'), 'click', randomm);
bind(player, 'error', function () {
randomm();
});
bind(get('switch'), 'click', function () {
auto = !auto;
this.innerText = '连续: ' + (auto ? '开' : '关');
});
bind(player, 'ended', function () {
if (auto) randomm();
});
})(window, document);</script>
<script>var _hmt = _hmt || [];(function() {var hm = document.createElement("script");hm.src = "https://hm.baidu.com/hm.js?a8569fd6981018f096d774868306a054";var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})();</script>
<style>
#switch,#next1{
background: #7F9CCC;
color:#fff;
line height:40px;
text align:center;
width:100px;
border:none;
margin:0 6px;
border radius:6px;
font weight:bold;
}
</style>
AI工具分享【一】
简介:AI 工具大全🎚️AI文本ChatGPT:https://chat.openai.comNotionAI:https://www.notion.so/product/aiA.I. Data Sidekick:AI工具编写 SQL、文档等的速度提高10倍https://www.airops.comWritesonic:人工智能写作辅助https://writesonic.comcopy.ai:使用 AI 编写更好的营销文案和内容https://www.copy.aiCharacter.AI:AI人工交互https://beta.character.aiFireflies:该工具可插入 Zoom、Teams 或 Webex 等流行的视频会议工具,并自动执行做笔记和创建转录的过程https://fireflies.aiJasper: AI文案写作https://www.jasper.aiOutplay:https://outplayhq.comCoWriter:AI辅助写作https://cowriter.org/login🎨AI绘画Midjourney:AI绘画网站:https://www.midjourney.com教程:https://www.uisdc.com/midjourneyPhotoRoom:擦除任何背景、对象https://www.photoroom.com造梦师:只需一句话,让你的文字变成画作https://printidea.artARC Lab:一款提供照片修复、抠图、画质增强的在线工具https://arc.tencent.com/zh/ai demos/faceRestorationArtbreeder:人工智能合成创意https://www.artbreeder.comStockimg AI:生成各种各样的设计元素,包括logo、插画、图片等https://stockimg.ainiji·journey:二次元ai绘画https://nijijourney.com/zhGetimg.ai:关键词生成图片的AIhttps://getimg.aiDreamlike.art:AI图像生成https://dreamlike.art文心一格 飞桨:AI艺术和创意辅助平台https://yige.baidu.comPhygital+:AI图像生成https://phygital.plusBeautiful.ai:AI生成PPThttps://www.beautiful.ai🎶AI音频Brain.fm:专注、放松、冥想和睡眠,聆听为您的大脑量身打造的音乐https://www.brain.fmSoundraw:生成音乐https://soundraw.ioEndel:个性化背景音,帮助您集中注意力、放松和睡眠https://endel.ioRiffusion:实时音乐和音频生成库https://www.riffusion.comhttps://github.com/riffusion/riffusionPapercup:人工智障配音和视频翻译软件https://www.papercup.comLALAL.AI:从任何音频和视频中提取人声、伴奏和各种乐器https://www.lalal.aiMurf:使用多功能AI语音生成器从文本到语音https://murf.aiPolyAI:语音助手https://poly.aiVoicemod:语音实时变声器https://www.voicemod.net/zhBoomy:生成音乐https://boomy.comMubert:生成音乐https://mubert.com🎞AI视频Runway: AI 魔法https://runwayml.comCascadeur:人工智障辅助关键帧动画软件https://cascadeur.comSynthesia:视频生成https://www.synthesia.ioPollinations:文本转视频、图片https://pollinations.aiZubtitle:为视频添加字幕和在线编辑视频https://zubtitle.comMunch:提取视频中最引人入胜、最流行和最有影响力的片段https://www.getmunch.comFliki:将文本变成带有 AI 语音的视频https://fliki.aiPeech:个性化自动视频编辑和管理平台https://www.peech ai.comDreamFace:AI 动画照片应用程序https://dreamfaceapp.comD ID:视频生成https://www.d id.com ✅分享是世界上最高级的浪漫!!
2025年12月15日
Monday.
焦点
近期文章
随机小姐姐
简介:示例
连续: 开
换一个
(function (window, document) {
if (top != self) {
window.top.location.replace(self.location.href);
}
var get = function (id) {
return document.getElementById(id);
}
var bind = function (element, event, callback) {
return element.addEventListener(event, callback);
}
var auto = true;
var player = get('player');
var randomm = function () {
player.src = 'http://v.nrzj.vip/video.php?_t=' + Math.random();
player.play();
}
bind(get('next1'), 'click', randomm);
bind(player, 'error', function () {
randomm();
});
bind(get('switch'), 'click', function () {
auto = !auto;
this.innerText = '连续: ' + (auto ? '开' : '关');
});
bind(player, 'ended', function () {
if (auto) randomm();
});
})(window, document);
var _hmt = _hmt || [];(function() {var hm = document.createElement("script");hm.src = "https://hm.baidu.com/hm.js?a8569fd6981018f096d774868306a054";var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})();
#switch,#next1{
background: #7F9CCC;
color:#fff;
line height:40px;
text align:center;
width:100px;
border:none;
margin:0 6px;
border radius:6px;
font weight:bold;
}
代码{hide}<div>
<section id="main">
<video id="player" src="http://v.nrzj.vip/video.php" controls="controls" width="100%" height="400px"></video>
</section>
</div>
<div style="text align: center;">
<section id="buttons">
<button id="switch">连续: 开</button>
<button id="next1">换一个</button>
</section>
</div>
<script src="https://hm.baidu.com/hm.js?a8569fd6981018f096d774868306a054
<script>
(function (window, document) {
if (top != self) {
window.top.location.replace(self.location.href);
}
var get = function (id) {
return document.getElementById(id);
}
var bind = function (element, event, callback) {
return element.addEventListener(event, callback);
}
var auto = true;
var player = get('player');
var randomm = function () {
player.src = 'http://v.nrzj.vip/video.php?_t=' + Math.random();
player.play();
}
bind(get('next1'), 'click', randomm);
bind(player, 'error', function () {
randomm();
});
bind(get('switch'), 'click', function () {
auto = !auto;
this.innerText = '连续: ' + (auto ? '开' : '关');
});
bind(player, 'ended', function () {
if (auto) randomm();
});
})(window, document);</script>
<script>var _hmt = _hmt || [];(function() {var hm = document.createElement("script");hm.src = "https://hm.baidu.com/hm.js?a8569fd6981018f096d774868306a054";var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})();</script>
<style>
#switch,#next1{
background: #7F9CCC;
color:#fff;
line height:40px;
text align:center;
width:100px;
border:none;
margin:0 6px;
border radius:6px;
font weight:bold;
}
</style>
AI工具分享【一】
简介:AI 工具大全🎚️AI文本ChatGPT:https://chat.openai.comNotionAI:https://www.notion.so/product/aiA.I. Data Sidekick:AI工具编写 SQL、文档等的速度提高10倍https://www.airops.comWritesonic:人工智能写作辅助https://writesonic.comcopy.ai:使用 AI 编写更好的营销文案和内容https://www.copy.aiCharacter.AI:AI人工交互https://beta.character.aiFireflies:该工具可插入 Zoom、Teams 或 Webex 等流行的视频会议工具,并自动执行做笔记和创建转录的过程https://fireflies.aiJasper: AI文案写作https://www.jasper.aiOutplay:https://outplayhq.comCoWriter:AI辅助写作https://cowriter.org/login🎨AI绘画Midjourney:AI绘画网站:https://www.midjourney.com教程:https://www.uisdc.com/midjourneyPhotoRoom:擦除任何背景、对象https://www.photoroom.com造梦师:只需一句话,让你的文字变成画作https://printidea.artARC Lab:一款提供照片修复、抠图、画质增强的在线工具https://arc.tencent.com/zh/ai demos/faceRestorationArtbreeder:人工智能合成创意https://www.artbreeder.comStockimg AI:生成各种各样的设计元素,包括logo、插画、图片等https://stockimg.ainiji·journey:二次元ai绘画https://nijijourney.com/zhGetimg.ai:关键词生成图片的AIhttps://getimg.aiDreamlike.art:AI图像生成https://dreamlike.art文心一格 飞桨:AI艺术和创意辅助平台https://yige.baidu.comPhygital+:AI图像生成https://phygital.plusBeautiful.ai:AI生成PPThttps://www.beautiful.ai🎶AI音频Brain.fm:专注、放松、冥想和睡眠,聆听为您的大脑量身打造的音乐https://www.brain.fmSoundraw:生成音乐https://soundraw.ioEndel:个性化背景音,帮助您集中注意力、放松和睡眠https://endel.ioRiffusion:实时音乐和音频生成库https://www.riffusion.comhttps://github.com/riffusion/riffusionPapercup:人工智障配音和视频翻译软件https://www.papercup.comLALAL.AI:从任何音频和视频中提取人声、伴奏和各种乐器https://www.lalal.aiMurf:使用多功能AI语音生成器从文本到语音https://murf.aiPolyAI:语音助手https://poly.aiVoicemod:语音实时变声器https://www.voicemod.net/zhBoomy:生成音乐https://boomy.comMubert:生成音乐https://mubert.com🎞AI视频Runway: AI 魔法https://runwayml.comCascadeur:人工智障辅助关键帧动画软件https://cascadeur.comSynthesia:视频生成https://www.synthesia.ioPollinations:文本转视频、图片https://pollinations.aiZubtitle:为视频添加字幕和在线编辑视频https://zubtitle.comMunch:提取视频中最引人入胜、最流行和最有影响力的片段https://www.getmunch.comFliki:将文本变成带有 AI 语音的视频https://fliki.aiPeech:个性化自动视频编辑和管理平台https://www.peech ai.comDreamFace:AI 动画照片应用程序https://dreamfaceapp.comD ID:视频生成https://www.d id.com ✅分享是世界上最高级的浪漫!!
STM32CubeMX闪退解决记录
简介:前言我电脑是Mac系统(使用PD虚拟机安装Windows),在正常安装STM32CubeMX软件后出现直接闪退,就一个软件的“开屏动画”,没有正常启动软件前几天在CSDN上找到了解决方向并成功启动软件,在这里也感谢一下_Stellar【QAQ】实践解决方向我们平时在遇到问题时,一定要有一个大致的方向,明确问题,知道如何正确的提问检查Java环境配置我就是由于java环境的问题导致,java和javac版本不一样1.代码 java version
javac version【如果第二个指令报错则更改成javac version】2.修改 set java_home=C:\Program Files\Java\jdk1.8.0_261 【安装JDK的根目录】
set classpath=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
set path=%JAVA_HOME%\bin;继续在终端输入以上两条指令查看版本是否一致;若仍然不一致通常情况下javac显示的版本为第一次配置JAVA_HOME时的版本,如果jdk版本更换存在问题,此时最方便的办法是卸载第一次配置的jdk,仅保留当前jdk。版本一致后即可,若仍然打不开则重启
浏览器免费观影
简介:当今社会,随着互联网的迅猛发展,人们获取信息和娱乐的方式也愈发多样化。在这个数字化时代,浏览器不仅是我们日常网络冲浪的工具,更成为了一扇开启无限可能的窗口。
无需担心会员费用,不必因为地域限制而苦恼,浏览器免费观影为我们提供了一个轻松、便捷的娱乐选择。
传感网应用开发TMP计算题目
简介:题目 已知TMP=0x49; TMP|= (5<<3); 则TMP对应的十进制可表示为( )。
A、 49 B、105 C、114 D、157解析1.列二进制 0x49 > 0100 1001B
5D > 101B2.|=表示或5<<3 <<3 表示向左移动三位,即向右添加3个0
即:1010004.计算位数不够从左开始补0 01001001
00101000
01101001 >0110 1001 > 69H > 6*16+9=105D