-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ayaka Script 与国际化支持 #12
Comments
解决方案1Ayaka Script 更改
伪 TeX 命令更改
增加概念行类型与行插件。 在之前的格式中,段落的每一行只能是文本。现在增加允许新的类型:exec、switch 与自定义类型(由行插件支持)。 如何解决上述问题?代码示例1脚本不允许引用资源文本,这样的写法无效。 代码示例2- exec: $v = random.rnd(10)
- \var{v} 解释:exec 是独立出来的代码行,代码行只能执行代码,计算出来的结果没有意义。如果想要在文本中显示出来,应该赋值给变量,然后利用 如果有多个语言版本,那么 exec 行不需要重复写,但是 后续也许会考虑更好的办法恢复这里的格式化功能。这个功能的主要难点在于:
代码示例3对于基础语言 - a = \var{a}
- exec: $b += 1
- b = \var{b} 对于其它语言 - a = \var{a}
- # exec: $b += 1
- b = \var{b} exec 行补充一点:非基础语言的翻译文本不应该出现 exec 行,但是不会跳过(后果自负……?) 考虑到 indexing 比较困难,无法翻译的 exec 行在其它语言文本中仍应该有一个占位符 - switch 行暂定如下语法: - switches:
- Switch 1 || $end = true
- Switch 2 || $end = false
- Switch 3 | false 使用竖线 - switches:
- 选项 1
- 选项 2
- 选项 3 如果不写就 fallback。 行插件行插件可以解决一些 TeX 命令控制状态很难写的问题。例如更换背景图的 - bg: 0 播放视频的 - video: 0 而 basictex 插件中的各种命令仍然保持不变,因为它们不是控制状态而是计算文本。 |
Ayaka Script 是完全没有国际化支持的。与之相关的资源文本虽然有国际化支持,但是在执行脚本时只是将当前语言的资源字典以及 fallback 传给了解释器。这相当于没有国际化支持。
同时,Ayaka Script 的嵌入方式非常自由,因此给国际化也带来了很大的压力。
我现在计划分离
Text
的 parsing 步骤,将Action
分成两部分,一部分ActionParams
是不变的属性与计算好的结果,不随语言变化;一部分Action
在需要显示的时候即时获取,以保证所有的显示内容与当前语言匹配。但是由于 Ayaka Script 没有国际化支持,这个重构面临着某些强耦合。代码示例1:
- \exec{ format.fmt(#r1, 123,456) }
提问:如果
r1
在不同的语言下有不同的值,format.fmt
在何时执行?代码示例2:
- \exec{ format.fmt("{}", random.rnd(10)) }
提问:如何保证
random.rnd
只执行一次?代码示例3:
提问:其它语言的文本怎么写?
我们也许需要一种新的语法来解决脚本语言的问题。
The text was updated successfully, but these errors were encountered: