trans.tin 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2024 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #nop 本文件是 xtintin 的一部分,实现了一些基于字典的翻译函数;
  8. #var {gDictC2D} {
  9. {零} {0}
  10. {一} {1}
  11. {二} {2}
  12. {三} {3}
  13. {四} {4}
  14. {五} {5}
  15. {六} {6}
  16. {七} {7}
  17. {八} {8}
  18. {九} {9}
  19. {十} {10}
  20. {百} {100}
  21. {千} {1000}
  22. {万} {10000}
  23. {亿} {100000000}
  24. };
  25. ///=== {
  26. // #@ trans.Word <待翻译字符串> <字典名称> [<语言名称>]
  27. // 提供基本的字符串翻译功能。翻译字典由字典名称指定的表格变量来指定。
  28. // 如果同时提供了语言名称,则意味着字典中存在多种语言条目,那么应当选择指定的语言翻译结果。
  29. // 本函数是基础功能,实践中一般用 trans.String 或者 trans.Simple
  30. // };
  31. #func {trans.Word} {
  32. #local input {%1};
  33. #local trans-word-dict {%2};
  34. #local sub {%3};
  35. #local value {${${trans-word-dict}[$input]}};
  36. #if { "$value" == "" } {
  37. #return {$input};
  38. };
  39. #elseif { &value[] == 0 } {
  40. #return {$value};
  41. };
  42. #elseif { "$sub" != "" } {
  43. #return {$value[$sub]};
  44. };
  45. #else {
  46. #return {$input};
  47. };
  48. };
  49. ///=== {
  50. // #@ trans.String <待翻译字符串> <字典名称> [<语言名称>]
  51. // 提供基本的字符串翻译功能。翻译字典由字典名称指定的表格变量来指定。
  52. // 如果同时提供了语言名称,则意味着字典中存在多种语言条目,那么应当选择指定的语言翻译结果。
  53. // };
  54. #func {trans.String} {
  55. #local input {%1};
  56. #local trans-string-dict {%2};
  57. #local sub {%3};
  58. #local output {@str.Replace{{$input};{{*UTF8}{.}};{@@trans.Word{{&1};$trans-string-dict}}}};
  59. #return {$output};
  60. };
  61. ///=== {
  62. // #@ trans.Simple <待翻译字符串> <源语言> <目标语言>
  63. // 提供基本的字符串翻译功能。将待翻译字符串中,每个源语言中的字符,替换成目标语言中对应的字符。
  64. // };
  65. #func {trans.Simple} {
  66. #local input {%1};
  67. #local src {@trans.expand-set{%2}};
  68. #local dst {@trans.expand-set{%3}};
  69. #if { @slist.Size{$src} != @slist.Size{$dst} } {
  70. warnLog 源语言和目标语言字典长度不同。;
  71. #return {$input};
  72. };
  73. #list src create {@str.Chars{$src}};
  74. #list dst create {@str.Chars{$dst}};
  75. #local trans-helper-dict {@list.ZipAs{{{%s}{%s}};{$src};{$dst}}};
  76. #local trans-helper-dict {@fp.Transform{{$trans-helper-dict};VALUE}};
  77. #local output {@str.Replace{{$input};{{*UTF8}{.}};{@@trans.Word{{&1};trans-helper-dict}}}};
  78. #return {$output};
  79. };
  80. ///=== {
  81. // #@ trans.Number <中文数字串>
  82. // 将中文数字串翻译成阿拉伯字符串。
  83. // 注意这和 math.ParseCN 不同,并不会识别十进制。它只是对文字的简单翻译。
  84. // };
  85. #func {trans.Number} {
  86. #local input {%1};
  87. #local output {@str.Replace{{$input};{{*UTF8}{.}};{@@trans.Word{{&1};gDictC2D}}}};
  88. #return {$output};
  89. };