iOS 多语言本地化适配

Xcode开启多语言适配:

WeChat8334cff15c519bf2490cbf7cf4d6753b.jpg

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的本地化语言集合样式都为以下样式:


WeChatcad4781df54cbcd510e3b40ac2d1a908.jpg

第一列是Key:代码里面的字符,key就是NSLocalizedString方法里面传的字符
storyboard里面的字符,key是所在控件的ID
第二列:对应的默认语言字符串
第三列:就是我们需要本地化的字符串(唯一可以修改的列)
到此,我们就可以在xcode里面通过填充所有xxxx.xcstrings文件的每个语言的第三列来完成多语言,然而当适配几十种语言时,这个过程很耗时。

适配工具:Loca Studio

Xcode菜单->Product -> Export Localization
会导出一个文件夹,文件夹内是每个语种的配置文件。
Xcode菜单->Product -> Import Localization
将每个语种的配置文件。修改完后,通过Import导回我们工程,

先推荐个多语言检查工具:Loca Studio,APPStore可下载。
将导出的多语言配置文件夹直接拖到这个app里打开:


截屏2024-03-29 11.54.42.png

可以看到我们所有要适配的语言,每种语言已适配的,未适配的,未确认的。
同时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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容