# Hebrew客户端地区设置中的错误MF翻译字符串导致致命的站点错误

**URL:** https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430
**Category:** Bug
**Created:** [2024 年7 月 21 日 08:45 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430 "2024-07-21T08:45:26Z")
**Posts on this page:** 18
**Page:** 2

<div class="post-metadata">

### 作者： ![thoka](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thoka/32/115652_2.png) [@thoka](https://meta.discourse.org/u/thoka)
#### 发布日期： [2024 年7 月 21 日 12:21 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/21 "2024-07-21T12:21:01Z")

</div>

> [@seefood](#):
>
> 如果crowdin的翻译有误，我无法修复。

我会进入容器，安装vim并修复本地化文件。  
你可以保存损坏的希伯来语本地化文件，然后用英语本地化文件覆盖它……

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 21 日 12:33 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/22 "2024-07-21T12:33:21Z")

</div>

```plaintext
root@carrie-app:/var/www# for i in `find . -name *.he.yml` ; do cp ${i/he.yml/en.yml} $i ; done

```

这个想法很可爱，但实际上并不能奏效。当我再次将我的区域设置为 HE 时，我收到了错误。我想我现在还是会遍历用户，将他们全部设置为英语。

---

<div class="post-metadata">

### 作者： ![thoka](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thoka/32/115652_2.png) [@thoka](https://meta.discourse.org/u/thoka)
#### 发布日期： [2024 年7 月 21 日 12:35 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/23 "2024-07-21T12:35:22Z")

</div>

修改区域设置后，您是否重新启动了 discourse？

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 21 日 12:42 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/24 "2024-07-21T12:42:41Z")

</div>

是的。没做什么。

![image](https://cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/meta/original/4X/5/7/1/57151c8d31979d6feaa332c2a6a6dc27506f4a83.png)

在展示了我旧的 Ruby 技能后，我现在暂时将所有人都切换到了英语。我稍后会就希伯来语本地化问题开一个工单。

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 21 日 12:54 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/25 "2024-07-21T12:54:42Z")

</div>

感谢 @JammyDodger 将话题移至 #contribute:bug。只需这样就能提交漏洞报告了吗？还是我需要在某个漏洞追踪器中提交正式报告？

---

<div class="post-metadata">

### 作者： ![thoka](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thoka/32/115652_2.png) [@thoka](https://meta.discourse.org/u/thoka)
#### 发布日期： [2024 年7 月 21 日 12:59 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/26 "2024-07-21T12:59:20Z")

</div>

如果复制了 en 区域设置，则在合并过程中会出现错误（似乎未翻译的条目被删除，如果没有剩余条目，则会出现错误）。  
但是，删除 `config/locales/client.he.yml` 可以让我的测试站点登录。

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 21 日 13:43 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/27 "2024-07-21T13:43:35Z")

</div>

因为它完全回退到EN。我认为这是预期的行为。

---

<div class="post-metadata">

### 作者： ![thoka](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thoka/32/115652_2.png) [@thoka](https://meta.discourse.org/u/thoka)
#### 发布日期： [2024 年7 月 21 日 14:26 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/28 "2024-07-21T14:26:15Z")

</div>

> [@seefood](#):
>
> I don’t think the problem is in the language files per se

在希伯来语区域设置 `config/locales/client.he.yml` 中

```plaintext
    posts_likes_MF: |
      { count, plural,
          one {תגובה, }
          two {שתי תגובות, }
          many {# תגובות, }
        other {# תגובות, }
      }{ ratio, select,
          low { יחס גבוה בין פוסטים ללייקים, }
          med { יחס גבוה מאוד בין פוסטים ללייקים, }
         high { יחס גבוה במיוחד בין פוסטים ללייקים, }
        other {}
      } קפיצה לפוסט הראשון או האחרון…

```

行

```plaintext
          many {# תגובות, }

```

必须删除。

希伯来语不允许使用 `many`（请参阅 [Language Plural Rules](https://www.unicode.org/cldr/charts/45/supplemental/language_plural_rules.html#he%EF%BC%89)

可以通过用户界面解决此问题。为此，应在希伯来语的 `/admin/customize/site_texts/js.posts_likes_MF` 中输入更正后的值：

```plaintext
{ count, plural,
    one {תגובה, }
    two {שתי תגובות, }
   other {# תגובות, }
}{ ratio, select,
    low { יחס גבוה בין פוסטים ללייקים, }
    med { יחס גבוה מאוד בין פוסטים ללייקים, }
   high { יחס גבוה במיוחד בין פוסטים ללייקים, }
  other {}
} קפיצה לפוסט הראשון או האחרון…

```

通过将错误数据输入文本自定义项，可能导致整个站点无法使用，这感觉有点奇怪。

---

<div class="post-metadata">

### 作者： ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### 发布日期： [2024 年7 月 21 日 20:28 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/30 "2024-07-21T20:28:24Z")

</div>

> [@seefood](#):
>
> 感谢 @JammyDodger 将其移至 #contribute:bug。只需这样就能提交错误报告吗？还是我需要在某个错误追踪器中提交正式报告？

在此处记录即为提交错误报告的正确位置。👍

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 22 日 07:08 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/31 "2024-07-22T07:08:46Z")

</div>

我将使用 git 来查看谁应该为那一行负责，我以为唯一允许提交更改到那些的是 crowdin？\n另外，如果是这种情况，为什么在复制完英文到希伯来文后重启 unicorn 就不能解决这个问题？

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 22 日 07:22 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/32 "2024-07-22T07:22:35Z")

</div>

> [@thoka](#):
>
> `many` 在希伯来语中是不允许的

实际上应该区分“不允许”和“不支持”。

> <https://github.com/discourse/discourse/blob/9d8044a2ee24615e0e76cf8f31d6c72ffc0f9a0d/config/locales/plurals.rb#L42-L42>

> <https://github.com/discourse/discourse/blob/9d8044a2ee24615e0e76cf8f31d6c72ffc0f9a0d/config/locales/plurals.rb#L50-L50>

奇怪的是，在 Discourse 代码中，“复数二”也不支持这两种语言代码，这与阿拉伯语是共享的。我认为问题需要在这里修复。我会为此提交一个 PR，但绝对有必要修复对“多余的”_many_ 字段的硬性失败，因为 Crowdin 似乎不符合这个 plurals.rb 文件。

---

<div class="post-metadata">

### 作者： ![thoka](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thoka/32/115652_2.png) [@thoka](https://meta.discourse.org/u/thoka)
#### 发布日期： [2024 年7 月 22 日 07:30 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/33 "2024-07-22T07:30:48Z")

</div>

我认为这更复杂。  
前端翻译由节点模块 `@messageformat/core` 使用 [messageformat-wrapper](https://www.rubydoc.info/gems/messageformat-wrapper/) 进行解释。

---

<div class="post-metadata">

### 作者： ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### 发布日期： [2024 年7 月 22 日 07:31 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/34 "2024-07-22T07:31:08Z")

</div>

问题在于复数规则定义在两个地方。另一个最近已更改为使用库（[https://github.com/discourse/discourse/commit/301713ef9631e52975781b60b8b4c4a0d75530cf）。](https://github.com/discourse/discourse/commit/301713ef9631e52975781b60b8b4c4a0d75530cf%EF%BC%89%E3%80%82)

然而，库中定义的复数规则并不总是与 Discourse 之前使用的规则相同，并且 plurals.rb 中的规则也没有更改。[Inconsistency in plural definition](https://meta.discourse.org/t/inconsistency-in-plural-definition/317456/)

但这并不能解释为什么 Crowdin 为许多复数创建了单独的版本。

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 22 日 07:59 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/35 "2024-07-22T07:59:52Z")

</div>

> <https://github.com/discourse/discourse/pull/28011>
>
> Side benefit: Fix so the fields created by Crowdin don't break the app
> 
> 
> 
> No… new tests added because this fixes a conformity rule, not adding any functionality.
> 
> This PR was born out of this bug discussion: https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/
> While it does not resolve the bug, it corrects an issue the bug exposed.

我添加了翻译所需的字段规则，但这并不是此错误的解决方案，只是为了兼容 Crowdin 的输出。

---

<div class="post-metadata">

### 作者： ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### 发布日期： [2024 年7 月 22 日 08:01 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/36 "2024-07-22T08:01:52Z")

</div>

我认为行尾的规则也需要调整。  
目前，这仍然只提到了“one”和“other”。  
` rule: lambda { |n| n == 1 ? :one : :other }`

---

<div class="post-metadata">

### 作者： ![seefood](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/seefood/32/380390_2.png) [@seefood](https://meta.discourse.org/u/seefood)
#### 发布日期： [2024 年7 月 22 日 09:45 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/37 "2024-07-22T09:45:00Z")

</div>

> [@Moin](#):
>
> 我认为行尾的规则也需要调整。

是的，我搞砸了。我用 amend 修复了它，却忽略了我在没有 --force 的情况下推送了它。现在已经更正了。

---

<div class="post-metadata">

### 作者： ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### 发布日期： [2024 年7 月 22 日 12:11 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/38 "2024-07-22T12:11:25Z")

</div>

感谢大家，让我们继续在此主题中跟踪更广泛的问题：

> [@Inconsistency in plural definition](https://meta.discourse.org/t/inconsistency-in-plural-definition/317456?u=david):
>
> Continuing the discussion from [Issue with pluralized (count) translation override](https://meta.discourse.org/t/issue-with-pluralized-count-translation-override/316019/7): I think Hungarian is not the only language affected by this. After checking Hebrew because of [this](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/28) #bug mentioning problems, I thought maybe even more languages are affected, so I started looking for more cases. After finding another one, I expect that even more languages are affected.

---

<div class="post-metadata">

### 作者： ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### 发布日期： [2024 年7 月 22 日 12:11 UTC](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430/39 "2024-07-22T12:11:28Z")

</div>



[上一页](https://meta.discourse.org/t/bad-mf-translation-string-in-hebrew-client-locale-causes-fatal-site-error/317430.md?page=1)
