Don
2024 年7 月 11 日 22:51
1
你好
我注意到最新的更新在计数为 1 时使用了复数字符串的 one 版本。问题是,到目前为止,即使计数为 1,复数字符串也始终使用 other 版本,并且在 /admin/customize/site_texts/ 中没有选项可以找到字符串的 one 版本,例如匈牙利语。然而,匈牙利语没有理由同时使用这两个版本(one 和 other),因为它们几乎是相同的。
重现步骤:
更改语言区域设置,例如匈牙利语
转到 /admin/customize/site_texts/
搜索,例如 js.topic_count_latest 并更改文本。
在“查看新主题或已更新主题”横幅上进行检查。
当只有一个更新可用时,它将使用默认值,因为您编辑的字符串是 other 版本。如果有更多新主题或已更新主题,文本将更改为您之前添加的内容。
谢谢
3 个赞
Lhc_fl
(Linca)
2024 年7 月 15 日 07:46
3
你好 @Don
我在简体中文上进行了此测试,未能重现此问题
我在原始字符串中添加了一个额外的字符(已高亮显示)。当计数为 1 时,更改确实发生了。
1 个赞
Moin
2024 年7 月 15 日 08:00
4
两种语言的复数定义中都只有“other”
但匈牙利语仍然为“one”单独翻译。
而中文没有
我想知道为什么在 Crowdin 中会为“one”创建单独的版本。
2 个赞
Don
2024 年7 月 15 日 08:18
5
是的,匈牙利语中有两个版本(一个和其他),但我认为它直到现在从未实际使用过“一个”版本,因为它在管理员文本自定义中也不可用。它总是回退到“其他”。
1 个赞
Lhc_fl
(Linca)
2024 年7 月 16 日 02:22
6
我可以问一下,匈牙利语有复数形式吗?如果有,也许我们应该向 plurals.rb 添加 :one 定义。
1 个赞
Lhc_fl
(Linca)
2024 年7 月 16 日 02:37
7
我找到了问题的根源。Discourse 的 I18n 依赖于一个外部库的复数定义:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse-i18n/src/index.js#L7
但在该库中,我们可以看到匈牙利语被定义为使用 a 类复数,它区分“一个”和其他。
},
hsb: (n) => {
const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i100 = i.slice(-2), f100 = f.slice(-2);
return v0 && i100 == 1 || f100 == 1 ? 'one'
: v0 && i100 == 2 || f100 == 2 ? 'two'
: v0 && (i100 == 3 || i100 == 4) || (f100 == 3 || f100 == 4) ? 'few'
: 'other';
},
hu: a,
hy: (n) => n >= 0 && n < 2 ? 'one' : 'other',
ia: d,
id: e,
ig: e,
ii: e,
我完全不懂匈牙利语,也许有人能帮我指出是他们的复数定义错了还是我们的错了
3 个赞
Don
2024 年7 月 16 日 05:09
8
你好
谢谢检查。
Linca:
我可以问一下,匈牙利语有复数形式吗?
嗯,匈牙利语有复数,但并非总是如此,这使得它有点困难。但我可以解释一些简单的例子。
大多数匈牙利语单词都有复数形式。
如果它是不可数的。
例如
Group → Groups = Csoport → Csoportok
Topic → Topics = Téma → Témák
所以我认为外部库是正确的,因为我们有复数形式。
但是,如果单词前面有数字(计数),我们就不使用复数。
如果它是可数的。
例如
1 group → 2 groups = 1 csoport → 2 csoport
1 topic → 2 topics = 1 téma → 2 téma
如果你查看匈牙利语文件,你会发现复数形式总是相同的。
然而,我看到有些字符串没有使用 count 的 one 形式。
像这样:
这没关系,因为在这种情况下我们不需要计数,当只有一个主题时,这很明显。但另一个区别在于 other 后面是一个数字。文本与是否有数字无关。
所以,如果你问我,我只会删除 one 形式。
但如果它来自一个外部库,我认为它是正确的,因为匈牙利语有复数形式,但并非 Discourse 使用的大多数情况。所以,添加 one 形式以获得自定义能力可能是最简单的解决方案,可以防止出现问题。是的,它基本上是相同的,但至少我们可以在管理员那里自定义它。
我不知道,这是一个难题。因为每个运行匈牙利语论坛并进行管理员自定义的人都只更改了 other 形式。因为它总是从 one 回退到 other。所以,如果我们添加 one 形式,管理员必须再次审查所有复数字符串,以便也修改该版本,使其与 other 相同。
谢谢
2 个赞
Lhc_fl
(Linca)
2024 年7 月 16 日 07:19
9
感谢您提供详细的回复!Bug 修复已合并:
main ← add-plurial-hungarian
opened 07:04AM - 16 Jul 24 UTC
Hungarian actually has a plural form (See: https://meta.discourse.org/t/issue-wi… th-pluralized-count-translation-override/316019/8)
In a past commit we introduced an external JS library to describe the plural form of the language. (https://github.com/discourse/discourse/commit/301713ef9631e52975781b60b8b4c4a0d75530cf)
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse-i18n/src/index.js#L7
```javascript
import * as Cardinals from "make-plural/cardinals";
```
But this JS library actually has a slightly different pluralization definition than what we use in the backend (`plurals.rb`). ruby-i18n incorrectly assumes that Hungarian does not have plural forms. This resulted in singular text being used on the front end for Hungarian, but admins were unable to find and edit the singular text in customization.
This commit adds a singular definition for Hungarian to the backend, compatible with the "make-plural/cardinals" library, thus fixing the above issue.
此修复程序为匈牙利语添加了 :one 形式。未来的 Crowdin 翻译人员可以尝试删除单数形式的 %{count},使其与 :other 形式区分开来。
5 个赞
Don
2024 年7 月 16 日 07:52
10
4 个赞
Lhc_fl
(Linca)
关闭
2024 年7 月 18 日 07:53
11
该主题在上次回复后 2 天自动关闭。不再允许新回复。
david
(David Taylor)
2024 年7 月 22 日 12:12
12
2 个赞