Xcode开启多语言适配:
1:添加需要本地化的语言,这里也可以设置默认语言
2:你的storeyboard就会多出来这么个子路径,里面是你storyboard里面需要本地话的文本。
3,把代码里面硬编码的字符串修改为以下样式:
//修改前:
//let start = "开始"
//let btn1 = "btn1"
//修改后:
let start = NSLocalizedString("开始", comment: "")
let btn1 = NSLocalizedString("btn1", comment: "")
然后Xcode会自动把代码里NSLocalizedString的字符串集合到Localizable.xcstrings(上图标记3)里面
无论是storyBoard还是Localizabel的本地化语言集合样式都为以下样式:
第一列是Key:代码里面的字符,key就是NSLocalizedString方法里面传的字符
storyboard里面的字符,key是所在控件的ID
第二列:对应的默认语言字符串
第三列:就是我们需要本地化的字符串(唯一可以修改的列)
到此,我们就可以在xcode里面通过填充所有xxxx.xcstrings文件的每个语言的第三列来完成多语言,然而当适配几十种语言时,这个过程很耗时。
适配工具:Loca Studio
Xcode菜单->Product -> Export Localization
会导出一个文件夹,文件夹内是每个语种的配置文件。
Xcode菜单->Product -> Import Localization
将每个语种的配置文件。修改完后,通过Import导回我们工程,
先推荐个多语言检查工具:Loca Studio,APPStore可下载。
将导出的多语言配置文件夹直接拖到这个app里打开:
可以看到我们所有要适配的语言,每种语言已适配的,未适配的,未确认的。
同时Loca Studio还有很多语言检查功能,空格检查,关键词检查等等。
我们可以
1,通过Loca Studio修改多语言配置文件,
2,(Loca Studio中-File-save,Edit->Finalize Mergem,)
3,再 Import Localization回Xcode
如果我们有专门负责翻译的同时,但是没有mac系统,无法使用LocaStudio 还可以导出表格来进行翻译工作,导出的表格第一行为语言缩写,第一列为key,第二列是默认语言,第三列开始就是我们要填充的目标语言内容:
1,Loca Studio菜单File->Export,导出excel表格,
2,让负责翻译的同事翻译完表格,
3,我们再导回Loca Studio,
4,然后File-save,Finalize Mergem,
5,Import Localization回Xcode
然而翻译工作量很大,既然我们有excel表格了,就可以用一些翻译API加脚本的方式来处理了。
一个翻译加excel表格处理python:
附上一个脚本,可以使用百度翻译API,根据第一行来获取目标语言,第2列作为要翻译的内容,来进行翻译输出,并最后写入excel中。
注意
1,需要自己去申请百度翻译API的key,id,这个很容易个人就可以申请,有免费试用额度(https://cloud.baidu.com)
2,需要导入依赖的python第三方库
3,最坑的一点是apple的语言缩写和百度的语言缩写不一致,需要手动把第一行语言缩写改为百度的,(参照:https://fanyi-api.baidu.com/doc/21)。执行完脚本后,还要改回apple的,当然这一步也可以用python来做,有想法的可以来完善一下。
# python版本:3.9.6,SECRET_KEY和API_KEY在百度智能云申请试用https://cloud.baidu.com
# 翻译表格的第一行语言缩写应该符合百度翻译的定义,参照https://fanyi-api.baidu.com/doc/21
# 需要先安装插件:pip install pandas openpyxl tk requests
import requests
import json
import hashlib
from openpyxl import Workbook
import pandas as pd
import tkinter as tk
from tkinter import filedialog ,Label
SECRET_KEY = 'xxxx'
API_KEY = 'xxxx'
EXCEL_FILE = None
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return str(requests.post(url, params=params).json().get("access_token"))
def open_file():
global EXCEL_FILE
filepath = filedialog.askopenfilename()
if filepath: # 确保文件路径不是空字符串
EXCEL_FILE = filepath
file_button.config(text="选定的文件路径: " + filepath)
print(EXCEL_FILE)
def doWork():
global EXCEL_FILE
print(EXCEL_FILE)
# 读取Excel文件
df = pd.read_excel(EXCEL_FILE)
print("读取完毕")
# 获取第一行作为语言缩写
# language_codes = df.iloc[0]
language_codes = df.columns
print("language_codes:\n" ,language_codes)
# 创建一个新的Workbook来存储翻译后的数据
wb = Workbook()
print("Workbook创建")
ws = wb.active
# 将语言缩写作为表头写入新的Workbook
ws.append(language_codes.tolist())
print("Workbook写入表头")
token = get_access_token()
print(token)
# 从第二行开始翻译数据
for index, row in df.iterrows():
print("行:(" + str(index) + ")")
print("内容:\n" + str(row) )
chinese_text = row[1]
print("中文内容:" + chinese_text )
translated_row = []
translated_row.append(row[0])
translated_row.append(chinese_text)
for col_index, cell_value in enumerate(language_codes, start=2):
print("col_index" + str(col_index))
if (col_index+1) > len(language_codes):
continue
# 获取当前单元格的语言缩写
language_code = language_codes[col_index]
print("language_code:" + language_code )
url = "https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=" + token
payload = json.dumps({
"from": "zh",
"to" : language_code,
"q" : chinese_text,
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
result = response.json()
print("result:\n" + str(result))
# 获取翻译结果
if 'error_code' in result and result['error_code'] != 0:
translated_text = ''
else:
translated_text = result['result']["trans_result"][0]["dst"]
print("translated_text:" + translated_text)
translated_row.append(translated_text)
print("translated_row:" + str(translated_row))
# 将翻译后的行写入新的Workbook
ws.append(translated_row)
print("写入一行")
# 保存翻译后的Excel文件
translated_file = EXCEL_FILE
wb.save(translated_file)
print(f'Translation complete. Check {translated_file} for the result.')
root = tk.Tk()
root.title("excel翻译")
# 创建文件选择器按钮
file_button = tk.Button(root, text="选择文件", command=open_file)
file_button.pack(pady=20)
# 创建开始按钮
start_button = tk.Button(root, text="开始", command=doWork)
start_button.pack(pady=20)
root.mainloop()