跳到主要内容

翻译系统

翻译系统是 Alia 语言的国际化机制,支持将关键字和对象翻译为不同的自然语言或关键字系统。

1. 翻译定义​

语法​

@translateAlias <String targetLanguage> <Keys GeneralKeywords> -> <Keys SpecificLanguageKeywords>
@translateClass <String targetLanguage> <Key ObjectName> <Array ObjectKeys> -> <Key newObjectName> <Array newObjectKeys>
@language <String targetLanguage>
@clearLanguage

@translateClass 仅登记方括号内的首个成员名映射(如 [加入] 对应 [push]),类名本身不参与翻译。

翻译指令在 AST 中默认不保留(执行/编译路径仅登记映射);Analyzer 调用时 (retainDocs: true)保留为 TranslateAliasStatement / TranslateClassStatement / LanguageStatement 节点(携带 location / codeSource),检查器与解释器将其视为空操作, Analyzer 据此提供翻译查找(findTranslationByPosition/ByAst/ByName,in alias/class)。

功能说明​

关键字功能
@translateAlias将通用关键字翻译为特定语言的关键字
@translateClass登记特定语言下的对象成员名到通用成员名的映射,仅在 . 成员访问后生效
@language设置使用的关键字系统(叠加式,可同时启用多种语言范式)
@clearLanguage恢复关键字为默认“Default”

作用域​

  • @language 在文件顶端声明时,作用于文件全局
  • @language 在一个 Stack 中声明时,作用于其语境

叠加式语言​

@language 支持叠加式设置,可同时启用多种语言范式:

@translateAlias '中文(简体)' print <Value val> -> 输出 <Value val>
@translateAlias 'VarStyle' let <Key name> = <Value val> -> var <Key name> = <Value val>

@language '中文(简体)'
@language 'VarStyle'
~ 现在可以同时使用中文与 VarStyle 的关键字
输出 '你好'
var count = 1

翻译按照声明顺序依次应用,后声明的语言优先匹配。

2. 使用示例​

翻译指令在解析阶段生效,须先于使用它们的代码声明:

~ 定义并启用中文关键字
@translateAlias '中文(简体)' let <Key name> = <Value val> -> 使 <Key name> 为 <Value val>
@translateAlias '中文(简体)' new <Key obj> ( <Code args> ) -> 新的 <Key obj> ( <Code args> )
@translateAlias '中文(简体)' print <Value val> -> 打印 <Value val>
@translateClass '中文(简体)' Array [push] -> 列表 [加入]

@language '中文(简体)'

使 示例列表 为 新的 Array []
示例列表.加入 '你好,世界!'
打印 示例列表[0]

3. 支持的翻译类型​

主流自然语言​

  • 可以使用 AI 进行初始翻译
  • 开放官方的社区协助翻译
  • 设置标准英文(自然语言英文)

其他关键字系统​

通过社区自主开发支持,例如:

  • 文言文
  • 假名日语
  • 表情符号
  • 中文拼音
  • 各语言简省关键字
  • 人造语言
  • 其他编程语言式关键字
  • 网络用语
  • 方言

4. 维护方式​

维护方职责
官方直接维护通用关键字,通过社区协助维护主流自然语言绑定
社区自主协作、自由上传一切翻译模组至模组仓库,可以编写对于一切其他模组的翻译模组
项目可自主维护多套其自身的官方翻译

5. 项目化机制​

场景行为
上传带有翻译的项目自动转为标准的 通用关键字
加载线上模组自动转为项目 config.json 中声明的语言
更新翻译包先转为 通用关键字,再转为新版特定翻译

6. 翻译系统的作用​

  1. 优化开发体验:使开发者可以在熟悉的语言环境中编写程序,且不影响程序的可读性
  2. 降低迁移成本:使新手可以快速上手 Alia 语言在原先的关键字体系下(如 Python)
  3. 面向初学者:使其可以使用母语快速学习理解 Alia 的编程方法

7. 示例代码​

~ 翻译系统综合示例

~ 1. 定义多语言翻译
@translateAlias '中文(简体)' if <Boolean condition> <Stack stack> -> 如果 <Boolean condition> <Stack stack>
@translateAlias '中文(简体)' else <Stack stack> -> 否则 <Stack stack>
@translateAlias '中文(简体)' let <Key name> = <Value val> -> 设 <Key name> 为 <Value val>
@translateAlias '中文(简体)' print <Value val> -> 输出 <Value val>
@translateAlias '中文(简体)' == -> 等于
@translateClass '中文(简体)' Array [push] -> 列表 [加入]

~ 2. 启用中文关键字
@language '中文(简体)'

设 计数 为 0
如果 计数 等于 0 {
输出 '计数为零'
} 否则 {
输出 '计数非零'
}
设 列表 为 []
列表.加入 '第一项'
输出 列表[0]

~ 3. 切换回通用关键字
@clearLanguage
let count = 0
for { let i = 0 } i < 3 { i ++ } {
print i
count ++
}

~ 4. 叠加式语言示例
@translateAlias 'VarStyle' let <Key name> = <Value val> -> var <Key name> = <Value val>
@language '中文(简体)'
@language 'VarStyle'
~ 现在可以混合使用中文与 VarStyle 风格的关键字

下一步​