Skip to content
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

まだ翻訳されてないエラーメッセージの翻訳仕方? #1

Closed
saltymouse opened this issue Dec 3, 2018 · 4 comments
Closed

Comments

@saltymouse
Copy link

この便利なプラグインのお陰で開発チームのみんなさんがESLintが使えるようになりました。ありがとうございました。

ESLintの裏の動き方には詳しくないですが、まだ翻訳されてないエラーメッセージを翻訳してみたいです。000.jsonに入っているルールと同じに新規ルールを追加したらいけますか?それともESLint側の更新まだ待っているところでしょうか?ルールの翻訳仕方(元のルールのjson形式の書き方とか)を教えて頂いたら翻訳したルールをプルリクエストで共有します。

よろしくおねがいします。

@mysticatea
Copy link
Owner

おお、このプラグインに興味を持って頂きありがとうございます。

ESLint のバージョン毎に messages のキーが異なっていたりするので、バージョン毎に翻訳ファイルを持つようにしています。

const ranges = [
"*",
]

  1. この配列に対応バージョンを semver ranges で設定して、配列の添え字と対応する JSON ファイル (001.json 等) を作成します。
  2. JSON ファイルに翻訳内容を記述します。

JSON ファイルの形式は、

// JSON ファイル全体の形状
interface TranslationData {
    [ruleId: string]: RuleTranslationData
}

// 各ルールの翻訳情報
interface RuleTranslationData {
    [messageId: string]: string
}

という感じです。

指定すべき messageId と翻訳文は、

https://github.com/eslint/eslint/blob/bb213dccfd0661fb82e8de42cbaa996c97722929/lib/rules/accessor-pairs.js#L93-L96

にあるような、各ルールのメタデータに対応した messageId と文章になります。

このメタデータを持っていないルールに関しては、翻訳できません。

@saltymouse
Copy link
Author

saltymouse commented Dec 8, 2018

ご丁寧に説明していただきありがとうございました。勉強になりました。

scripts/extract-new-messages.jsを使ってみて、まだ翻訳されてないmessageId対応できるルールが少し入ってきました。そのメッセージを翻訳してみて、エディターのESLintに反映されました!

しかしまだわからないことがあります。。。
新しく入ってきたルールのメッセージに文字列補間{{loc}}{{location}}があります。
英文に合わせている単語(before || after)の変数みたいですね。

以前に(古いスタイル?)書かれていたルールには「after」と「before」のメッセージは分かれていて、別のメッセージとして書いていました。

"computed-property-spacing": {
    "unexpectedSpaceBefore": "'{{tokenValue}}'の前に空白を書かないで下さい。",
    "unexpectedSpaceAfter": "'{{tokenValue}}'の後に空白を書かないで下さい。",
    "missingSpaceBefore": "'{{tokenValue}}'の前に空白が必要です。",
    "missingSpaceAfter": "'{{tokenValue}}'の後に空白が必要です。"
},

新スタイルは下記のように文字列補間が利用されています。

"comma-spacing": {
  "missing": "A space is required {{loc}} ','.",
  "unexpected": "There should be no space {{loc}} ','."
},

{{loc}}はまだ英語のままですので、翻訳しにくいですね。

"missing": "A space is required {{loc}} ','.",

"missing": "','{{loc}}空白が必要です。",','before空白が必要です。

この場合はどうすればいいですか?{{loc}}のようは変数も翻訳できますでしょうか?

@mysticatea
Copy link
Owner

scripts/extract-new-messages.jsを使ってみて、まだ翻訳されてないmessageId対応できるルールが少し入ってきました。

おお、そのスクリプトの存在を完全に忘れていました。

{{loc}}はまだ英語のまま

これは ESLint のバグですので、computed-property-spacing ルールのようにメッセージ ID を分けるよう ESLint 側を修正する必要があります。

このプラグインにバージョン判定の仕組みを持たせたのはそのためです。

@saltymouse
Copy link
Author

saltymouse commented Dec 9, 2018

なるほどです。ESLint側のメッセージの書き方はまだ検討中ですね。
ESLint側の話を監視します。 eslint/eslint#9870
とりあえず、このプラグインに入っているルールのメッセージ翻訳文を使っていきます。
ありがとうございます!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants