翻译系统
翻译系统是 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. 翻译系统的作用
- 优化开发体验:使开发者可以在熟悉的语言环境中编写程序,且不影响程序的可读性
- 降低迁移成本:使新手可以快速上手 Alia 语言在原先的关键字体系下(如 Python)
- 面向初学者:使其可以使用母语快速学习理解 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 风格的关键字