iOS 工具集

iOS 多语言本地化适配

2024-03-28  本文已影响0人  万年老参

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()

上一篇下一篇

猜你喜欢

热点阅读