module.exports = {
langs: ['zh', 'en'],
test: '.*\\.tr$',
exclude: ['node_modules'],
langs
是我们需要支持的语言,这是一个字符串数组,其中数组的第一项为基准语言
,也就是我们会通过基准语言来:
作为基准翻译到其他语言
已基准语言的语言包为基础,对比和推断需要翻译的其他语言包
查看更多配置项
bbt collect
收集所有的符合要求的语言包,并将信息提取到 bbt.csv
中,方便翻译人员进行翻译和校准。当然你也可以使用 bbt translate
自动翻译
shortName
description
default
required
'google' | 'deepl' | 'chatgpt'
使用哪个翻译 API, 如果 bbt.config.js 自定义了 translator,则以配置为准
'google'
false
--proxy
string
正向代理地址 , 如果为空的话,会通过
环境变量进行获取
false
--force
boolean
是否强制进行翻译, 默认情况下只会翻按需翻译(即无翻译内容时翻译),
请谨慎开启
false
false
--model
'gpt-4' | 'gpt-3.5-turbo'
使用
chatgpt
进行翻译时所使用的模型
'gpt-3.5-turbo'
false
--api-key
string
翻译服务的
API Key
, 如果为空的话,会通过
环境变量进行获取
false
--base-url
string
反向代理地址, 如果为空的话,会通过
环境变量进行获取
false
bbt 支持通过 Google、DeepL、ChatGPT 等方案进行初步的机器翻译。如果你想使用其他的翻译服务,可以通过自定义插件的方式进行扩展.
Google 翻译
默认使用的就是 Google 翻译
npx bbt translate -t google --api-key GOOGLE_TRANSLATION_API_KEY
可以通过 --api-key 选项或者 BBT_GOOGLE_API_KEY 环境变量来配置 Google 翻译的 API KEY。
我们也建议你将环境变量配置在用户目录下的 .profile 或者 .bashrc 这类文件中,这样可以避免每次都需要输入 API KEY。
Google 翻译需要依赖科学上网,需要自行解决。有两种代理配置方式:
通过 --proxy 选项或者 BBT_PROXY 环境变量来配置正向代理地址,bbt 会自动将请求转发到代理地址上
通过终端代理的方式进行配置,例如:export http_proxy=YOU_PROXY_ADDRESS
和 Google 翻译类似,需要通过 --api-key 选项或者 BBT_DEEPL_API_KEY 环境变量来配置 DeepL 翻译的 API KEY。
ChatGPT 翻译(实验性)
--model
确定使用的 ChatGPT 模型版本。默认为 gpt-3.5-turbo
--base-url
或 BBT_OPEN_AI_BASE_URL
环境变量。如果你自己搭建了 ChatGPT 的代理服务,可以通过这个选项来配置
--api-key
或 BBT_OPEN_AI_API_KEY
配置 OPEN AI 的 API KEY
有时候国际化资源并不是使用JSON
格式, 因此可以通过plugins.parser
来自定义文件的解析方式
export interface FileParser<T = any> {
parse(str: string): Record<string, T>;
stringify(record: Record<string, T>): string;
example
zh.tr
hello 你好
world 世界
bbt.config.js
module.exports = {
// ...other
plugins: {
parser: {
parse(content) {
return Object.fromEntries(content.split(/\n/).map(str => str.split(/\s/)));
stringify(record) {
return Object.entries(record)
.map(arr => arr.join(' '))
.join('\n');
自定义翻译 API
* @param record - 需要翻译的数据源
* @param target - 翻译的目标语言
* @param sourceLanguage - 数据源原本的语言
* @returns Observable<TranslatedList<string>> | Promise<TranslatedList<string>>;
translator: (record: Record<string, string>, target: string, sourceLanguage: string) =>
Observable<TranslatedList<string>> | Promise<TranslatedList<string>>;
example
// bbt.config.js
module.exports = {
// other
plugins: {
translator: (textMap, target, sourceLanguage) => {
return Promise.resolve(
Object.entries(textMap).map(([key, value]) => ({
target,
key,
translatedText: `${value} - ${target}`,
}))
License