开启左侧

方便快捷的多语言支持

[复制链接]
Harlotte 作者认证 5 天前

还没有账号?赶快去注册吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

×


分享一段python程序,用于快速做多语言支持。
本程序需要Python环境,在申请了百度翻译的API并保存配置文件后即可使用。
程序会自动在当前路径下寻找zh_cn.json,翻译为其他语言并保存。
您可以通过调整target_languages 的内容来选择翻译的语言。
  1. '''
  2. 使用前请安装 requests 模块:
  3. pip install requests

  4. 请在zh_cn.json中填写内容, 随后运行此脚本, 将自动翻译为其他语言并覆盖原文件。
  5. cd common/src/main/resources/assets/mtrsteamloco/lang
  6. python translate.py
  7. '''

  8. import os
  9. import json
  10. import hashlib
  11. import random
  12. import requests

  13. # 配置文件路径
  14. # {"appid": "你的 APP ID", "secret_key": "你的密钥"}
  15. config_file = r'D:\bdapi.json'

  16. # 目标语言代码映射
  17. target_languages = {
  18.     'de_de': 'de',  # 德语
  19.     'en_us': 'en',  # 英语
  20.     'ja_jp': 'jp',  # 日语
  21.     'pt_pt': 'pt',  # 葡萄牙语
  22.     'zh_cn': 'zh',  # 简体中文(无需翻译)
  23.     'zh_hk': 'cht',  # 繁体中文(香港)
  24.     'zh_tw': 'cht',  # 繁体中文(台湾)
  25.     'fr_fr': 'fra',  # 法语
  26.     'es_es': 'spa',  # 西班牙语
  27.     'it_it': 'it',  # 意大利语
  28.     'ru_ru': 'ru',  # 俄语
  29.     'ko_kr': 'kor',  # 韩语
  30. }
  31. '''
  32.     'ar_sa': 'ara',  # 阿拉伯语
  33.     'nl_nl': 'nl',  # 荷兰语
  34.     'sv_se': 'swe',  # 瑞典语
  35.     'pl_pl': 'pl',  # 波兰语
  36.     'tr_tr': 'tr',  # 土耳其语
  37.     'cs_cz': 'cs',  # 捷克语
  38.     'da_dk': 'dan',  # 丹麦语
  39.     'fi_fi': 'fin',  # 芬兰语
  40.     'el_gr': 'el',  # 希腊语
  41.     'hu_hu': 'hu',  # 匈牙利语
  42.     'no_no': 'no',  # 挪威语
  43.     'ro_ro': 'rom',  # 罗马尼亚语
  44.     'sk_sk': 'sk',  # 斯洛伐克语
  45.     'th_th': 'th',  # 泰语
  46.     'uk_ua': 'uk',  # 乌克兰语
  47.     'vi_vn': 'vie',  # 越南语
  48.     'he_il': 'iw',  # 希伯来语
  49.     'id_id': 'id',  # 印尼语
  50.     'ms_my': 'ms',  # 马来语
  51.     'hi_in': 'hi',  # 印地语
  52.     'bn_in': 'bn',  # 孟加拉语
  53.     'ta_in': 'ta',  # 泰米尔语
  54.     'te_in': 'te',  # 泰卢固语
  55.     'ml_in': 'ml',  # 马拉雅拉姆语
  56.     'mr_in': 'mr',  # 马拉地语
  57.     'gu_in': 'gu',  # 古吉拉特语
  58.     'kn_in': 'kn',  # 卡纳达语
  59.     'or_in': 'or',  # 奥里亚语
  60.     'pa_in': 'pa',  # 旁遮普语
  61.     'as_in': 'as',  # 阿萨姆语
  62.     'sd_in': 'sd',  # 信德语
  63.     'si_lk': 'si',  # 僧伽罗语
  64.     'ne_np': 'ne',  # 尼泊尔语
  65.     'my_mm': 'my',  # 缅甸语
  66.     'lo_la': 'lo',  # 老挝语
  67.     'km_kh': 'km',  # 高棉语
  68.     'tg_tj': 'tg',  # 塔吉克语
  69.     'ky_kg': 'ky',  # 吉尔吉斯语
  70.     'uz_uz': 'uz',  # 乌兹别克语
  71.     'kk_kz': 'kk',  # 哈萨克语
  72.     'az_az': 'az',  # 阿塞拜疆语
  73.     'hy_am': 'hy',  # 亚美尼亚语
  74.     'ka_ge': 'ka',  # 格鲁吉亚语
  75.     'be_by': 'be',  # 白俄罗斯语
  76.     'lv_lv': 'lv',  # 拉脱维亚语
  77.     'lt_lt': 'lt',  # 立陶宛语
  78.     'et_ee': 'et',  # 爱沙尼亚语
  79.     'mt_mt': 'mt',  # 马耳他语
  80.     'is_is': 'is',  # 冰岛语
  81.     'hr_hr': 'hr',  # 克罗地亚语
  82.     'sl_si': 'sl',  # 斯洛文尼亚语
  83.     'bs_ba': 'bs',  # 波斯尼亚语
  84.     'mk_mk': 'mk',  # 马其顿语
  85.     'sq_al': 'sq',  # 阿尔巴尼亚语
  86.     'gl_es': 'gl',  # 加利西亚语
  87.     'eu_es': 'eu',  # 巴斯克语
  88.     'ca_es': 'ca',  # 加泰罗尼亚语
  89.     'af_za': 'af',  # 南非荷兰语
  90.     'sw_ke': 'sw',  # 斯瓦希里语
  91.     'ur_pk': 'ur',  # 乌尔都语
  92.     'fa_ir': 'fa',  # 波斯语
  93.     'sd_pk': 'sd',  # 信德语(巴基斯坦)
  94.     'ug_cn': 'ug',  # 维吾尔语
  95.     'bo_cn': 'bo',  # 藏语
  96.     'mn_mn': 'mn',  # 蒙古语
  97.     'ha_ng': 'ha',  # 豪萨语
  98.     'so_so': 'so',  # 索马里语
  99.     'am_et': 'am',  # 阿姆哈拉语
  100.     'ti_er': 'ti',  # 提格雷尼亚语
  101.     'ps_af': 'ps',  # 普什图语
  102.     'ku_tr': 'ku',  # 库尔德语
  103.     'dv_mv': 'dv',  # 迪维希语
  104.     'ny_mw': 'ny',  # 齐切瓦语
  105.     'sn_zw': 'sn',  # 绍纳语
  106.     'ts_za': 'ts',  # 聪加语
  107.     've_za': 've',  # 文达语
  108.     'xh_za': 'xh',  # 科萨语
  109.     'zu_za': 'zu',  # 祖鲁语
  110.     'ss_za': 'ss',  # 斯威士语
  111.     'st_za': 'st',  # 塞索托语
  112.     'tn_za': 'tn',  # 茨瓦纳语
  113.     'rw_rw': 'rw',  # 卢旺达语
  114.     'or_od': 'or',  # 奥里亚语(奥里萨邦)
  115.     'br_fr': 'br',  # 布列塔尼语
  116.     'cy_gb': 'cy',  # 威尔士语
  117.     'gd_gb': 'gd',  # 苏格兰盖尔语
  118.     'ga_ie': 'ga',  # 爱尔兰语
  119.     'iu_ca': 'iu',  # 因纽特语
  120.     'mi_nz': 'mi',  # 毛利语
  121.     'sm_ws': 'sm',  # 萨摩亚语
  122.     'to_to': 'to',  # 汤加语
  123.     'fj_fj': 'fj',  # 斐济语
  124.     'ty_pf': 'ty',  # 塔希提语
  125.     'haw_us': 'haw',  # 夏威夷语
  126.     'yua_mx': 'yua',  # 尤卡坦玛雅语
  127.     'quc_gt': 'quc',  # 基切语
  128.     'gn_py': 'gn',  # 瓜拉尼语
  129.     'ay_pe': 'ay',  # 艾马拉语
  130.     'nah_mx': 'nah',  # 纳瓦特尔语
  131.     'otq_mx': 'otq',  # 奥托米语
  132.     'tpi_pg': 'tpi',  # 托克皮辛语
  133.     'ho_pg': 'ho',  # 希里莫图语
  134.     'bi_vu': 'bi',  # 比斯拉马语
  135.     'fj_vu': 'fj',  # 斐济语(瓦努阿
  136. '''

  137. # 翻译函数
  138. def translate_text(query, from_lang='zh', to_lang='en', appid=None, secret_key=None):
  139.     if not appid or not secret_key:
  140.         raise ValueError("APP ID 或密钥未提供")
  141.    
  142.     # 定义翻译 API 的 URL
  143.     url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
  144.    
  145.     salt = random.randint(32768, 65536)
  146.     sign = hashlib.md5((appid + query + str(salt) + secret_key).encode('utf-8')).hexdigest()
  147.     params = {
  148.         'q': query,
  149.         'from': from_lang,
  150.         'to': to_lang,
  151.         'appid': appid,
  152.         'salt': salt,
  153.         'sign': sign
  154.     }
  155.     try:
  156.         response = requests.get(url, params=params)
  157.         result = response.json()
  158.         if 'trans_result' in result:
  159.             return result['trans_result'][0]['dst']
  160.         else:
  161.             print(f"翻译失败: {result}")
  162.             return query
  163.     except Exception as e:
  164.         print(f"请求失败: {e}")
  165.         return query

  166. # 加载配置文件
  167. def load_config(file_path):
  168.     if not os.path.exists(file_path):
  169.         raise FileNotFoundError(f"配置文件未找到: {file_path}")
  170.    
  171.     with open(file_path, 'r', encoding='utf-8') as f:
  172.         config = json.load(f)
  173.    
  174.     if 'appid' not in config or 'secret_key' not in config:
  175.         raise ValueError("配置文件中缺少 APP ID 或密钥")
  176.    
  177.     return config['appid'], config['secret_key']

  178. # 主函数
  179. def translate_json(input_file, output_dir, appid, secret_key):
  180.     # 确保输出目录存在
  181.     if not os.path.exists(output_dir):
  182.         os.makedirs(output_dir)

  183.     # 加载源 JSON 文件
  184.     with open(input_file, 'r', encoding='utf-8') as f:
  185.         source_data = json.load(f)

  186.     # 遍历目标语言
  187.     for lang_code, baidu_lang_code in target_languages.items():
  188.         translated_data = {}
  189.         for key, value in source_data.items():
  190.             if lang_code == 'zh_cn':  # 简体中文无需翻译
  191.                 translated_data[key] = value
  192.             else:
  193.                 translated_data[key] = translate_text(value, to_lang=baidu_lang_code, appid=appid, secret_key=secret_key).replace('% s', '%s')
  194.                 print(f"已翻译: {key} -> {translated_data[key]}")

  195.         # 保存翻译后的 JSON 文件
  196.         output_file = os.path.join(output_dir, f'{lang_code}.json')
  197.         with open(output_file, 'w', encoding='utf-8') as f:
  198.             json.dump(translated_data, f, ensure_ascii=False, indent=4)
  199.         print(f"已保存: {output_file}")

  200. # 运行脚本
  201. if __name__ == '__main__':
  202.     input_file = './zh_cn.json'  # 输入文件路径
  203.     output_dir = './'  # 输出目录

  204.     try:
  205.         # 加载账户信息
  206.         appid, secret_key = load_config(config_file)
  207.         print("配置文件加载成功!")

  208.         # 开始翻译
  209.         translate_json(input_file, output_dir, appid, secret_key)
  210.     except Exception as e:
  211.         print(f"错误: {e}")
复制代码



评分

参与人数 1人气 +1 收起 理由
Hobbytimeblank + 1 MTRBBS有你更精彩!

查看全部评分

ShentongMetro 作者认证 4 天前
大草机翻机器(
还不如抓网页版api
MTRSHM制作组代码
你圈老锐评家,现已退化只会造低创,卷不动了
楼主 Harlotte 作者认证 4 天前
ShentongMetro 发表于 2025-1-5 12:01
大草机翻机器(
还不如抓网页版api

好 剩下的不会了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表