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

Yari時代の翻訳補助を考える #586

Closed
unarist opened this issue Feb 27, 2022 · 17 comments
Closed

Yari時代の翻訳補助を考える #586

unarist opened this issue Feb 27, 2022 · 17 comments

Comments

@unarist
Copy link
Contributor

unarist commented Feb 27, 2022

Kuma 時代は以下のような機能を持ったUserScriptがありました。

  • 見出しのidを英語のままにするためのname属性付与
  • 自動翻訳もとい置換
    • 見出しや互換性表などのよくある語句
    • アルファベットと日本語の間に半角スペースを自動挿入
    • /en-US/docs/ → /ja/docs/
    • etc.
  • 翻訳中フラグをオフに、編集レビューをオンに
  • タグを元記事からコピー
  • 編集コメントに元記事のリビジョン番号を自動入力

https://github.com/mozilla-japan/translation/tree/master/MDN

Yari / GitHub 運用になって不要になった機能もある一方で、今でも一部機能は便利そうです。

  • 見出しのidを英語のままにするための ## hoge<h2 id="hoge">hoge</h2> 変換
  • 定型文の自動翻訳(どこまでやるかは相変わらず迷う)
  • いわゆる校正・スタイルガイド適用(表記揺れ、長音、スペース)
  • タグの同期(まとめてコピペできるのでそれでもいいかも)

ので、なんか考えたいなというか、実験のメモとかの置き場としてissueを起こしてみました。

@unarist
Copy link
Contributor Author

unarist commented Feb 27, 2022

以下のような路線があるだろうか。

  • cloneせずGitHub上で編集しちゃう人向け
  • cloneする人向け
    • 外部エディタ(VSCodeとか)向け
      • textlint や prh みたいな既存のツールに乗っかれると楽かもしれない
      • 設定ファイルの置き場に悩むかもしれない
    • yarn start で生えるあれの組み込みエディタを魔改造?
      • 原文との比較とかもやれそうではある
    • エディタを作る??

で、とりあえず prh のルールをやっつけで作ってみた。

  • vscode-prh-extension を使ってみたが、ちょっと古くて動きが微妙
    • VSCodeのQuickFixから修正ができず、拡張が生やしたコマンドで一括修正しかできない?
  • スペースの調整とかは textlint にルールがあるのでそっちでやるといい気がする
    • が、textlint-rule-prh を使うとHTMLタグを巻き込んだ置換とかできない気がする
    • タグ指定置換の代わりに完全一致 /^hoge$/ とかでもいいかもしれない?
prh.ymlの例

VSCodeでやる場合:

  • VSCodeに拡張を入れる
  • 以下のテキストを translated-content 内の適当なディレクトリに prh.yml として保存
  • prh.yml は自動で検出してくれるかもしれないが、 { "prh.configFiles": [ "prh.yml" ] } みたいなのを .vscode/settings.json に書かないといけないかもしれない
  • 今のVSCodeだと個別適用はできないらしく、右下の prh ボタンかコマンドパレットから一括修正するしかない
version: 1

imports:

rules:

  # 日本語版にURLを書き換え
  - expected: /ja/
    pattern: /\/en-US\//
    specs:
      - from: https://developer.mozilla.org/en-US/docs/Web
        to: https://developer.mozilla.org/ja/docs/Web
  
  # Markdownの見出しをid付きHTMLに変換
  - expected: <h1 id="$1">$1</h1>
    pattern: "/^# (.+)/"
  - expected: <h2 id="$1">$1</h2>
    pattern: "/^## (.+)/"
  - expected: <h3 id="$1">$1</h3>
    pattern: "/^### (.+)/"
  - expected: <h4 id="$1">$1</h4>
    pattern: "/^#### (.+)/"
  
  # 長音をつけない言葉
  - expected: "アクセシビリティ"
    pattern: "/アクセシビリティー/"
  - expected: "ポータビリティ"
    pattern: "/ポータビリティー/"
  - expected: "プロパティ"
    pattern: "/プロパティー/"
  - expected: "セキュリティ"
    pattern: "/セキュリティー/"
  - expected: "コミュニティ"
    pattern: "/コミュニティー/"
  - expected: "ハードウェア"
    pattern: "/ハードウェアー/"
  - expected: "ソフトウェア"
    pattern: "/ソフトウェアー/"

  # 長音をつける言葉
  - expected: "サーバー"
    pattern: "/サーバ(?!ー)/"
  - expected: "ユーザー"
    pattern: "/ユーザ(?!ー)/"
  - expected: "ブラウザー"
    pattern: "/ブラウザ(?!ー)/"
  - expected: "コンピューター"
    pattern: "/コンピュータ(?!ー)/"
  - expected: "カレンダー"
    pattern: "/カレンダ(?!ー)/"
  - expected: "プライバシー"
    pattern: "/プライバシ(?!ー)/"
  - expected: "バイナリー"
    pattern: "/バイナリ(?!ー)/"
  - expected: "メモリー"
    pattern: "/メモリ(?!ー)/"
  - expected: "マネージャー"
    pattern: "/マネージャ(?!ー)/"
  - expected: "フィルター"
    pattern: "/フィルタ(?!ー)/"
  - expected: "デバッガー"
    pattern: "/デバッガ(?!ー)/"
  - expected: "ディストリビューター"
    pattern: "/ディストリビュータ(?!ー)/"
  - expected: "モニター"
    pattern: "/モニタ(?!ー)/"
  - expected: "カウンター"
    pattern: "/カウンタ(?!ー)/"
  - expected: "フォルダー"
    pattern: "/フォルダ(?!ー)/"
  - expected: "イテレーター"
    pattern: "/イテレータ(?!ー)/"
  - expected: "ジェネレーター"
    pattern: "/ジェネレータ(?!ー)/"
  - expected: "ディレクトリー"
    pattern: "/ディレクトリ(?!ー)/"
  # from #260
  - expected: "プロキシー"
    pattern: "/プロキシ(?!ー)/"
  
  # 日本語の表記揺れ
  - expected: "インターフェイス"
    pattern: "/インター?フェ[ーイ]ス/"
  - expected: "カンマ"
    pattern: "/コンマ/"
  - expected: "ファイアウォール"
    pattern: "/ファイヤー?ウォール/"

  # 定型訳
  # common - タグ限定
  - expected: "$1仕様<"
    pattern: "/(<h2(?: [^>]*)?>)Specifications?</"
  - expected: "$1注$2<"
    pattern: "/(<strong(?: [^>]*)?>)Note(:?)</"
  - expected: "$1警告$2<"
    pattern: "/(<strong(?: [^>]*)?>)Warning(:?)</"
  - expected: "$1例<"
    pattern: "/(<h2(?: [^>]*)?>)Examples?</"
  - expected: "$1ブラウザー実装状況<"
    pattern: "/(<h2(?: [^>]*)?>)Browser compatibility</"
  - expected: "$1注記<"
    pattern: "/(<h2(?: [^>]*)?>)Notes</"
  - expected: "$1関連情報<"
    pattern: "/(<h2(?: [^>]*)?>)See also</"
  - expected: "$1型<"
    pattern: "/(<th(?: [^>]*)?>)Type</"
  - expected: "$1例<"
    pattern: "/(<th(?: [^>]*)?>)Example</"
  - expected: "$1名前<"
    pattern: "/(<th(?: [^>]*)?>)Name</"
  - expected: "$1必須<"
    pattern: "/(<th(?: [^>]*)?>)Mandatory</"
  - expected: "$1はい<"
    pattern: "/(<td(?: [^>]*)?>)Yes</"
  - expected: "$1いいえ<"
    pattern: "/(<td(?: [^>]*)?>)No</"
  # タグ限定なし
  - expected: "例えば、"
    pattern: "/[Ff]or example,?/"
  - expected: "プログラミング言語"
    pattern: "/programming language/"
  - expected: "既定では"
    pattern: "/[Bb]y default/"
  # common - compatibility table
  - expected: "$1基本サポート<"
    pattern: "/(<td(?: [^>]*)?>)Basic support</"
  - expected: "$1機能<"
    pattern: "/(<th(?: [^>]*)?>)Feature</"
  - expected: "$1仕様書<"
    pattern: "/(<th(?: [^>]*)?>)Specification</"
  - expected: "$1策定状況<"
    pattern: "/(<th(?: [^>]*)?>)Status</"
  - expected: "$1コメント<"
    pattern: "/(<th(?: [^>]*)?>)Comment</"
  - expected: "$1初期定義<"
    pattern: "/(<td(?: [^>]*)?>)Initial (definition|specification).?</"
  # common - constant table
  - expected: "$1値<"
    pattern: "/(<(?:th|h3)(?: [^>]*)?>)Values?</"
  - expected: "$1定数<"
    pattern: "/(<th(?: [^>]*)?>)Associated constant</"
  - expected: "$1説明<"
    pattern: "/(<(?:th|h[2-3])(?: [^>]*)?>)Description</"
  # JavaScript API
  - expected: "$1メソッド<"
    pattern: "/(<h2(?: [^>]*)?>)Methods</"
  - expected: "$1プロパティ<"
    pattern: "/(<h2(?: [^>]*)?>)Properties</"
  - expected: "$1構文<"
    pattern: "/(<h2(?: [^>]*)?>)Syntax</"
  - expected: "$1パラメーター<"
    pattern: "/(<h3(?: [^>]*)?>)Parameters</"
  - expected: "$1定数<"
    pattern: "/(<h3(?: [^>]*)?>)Constants</"
  - expected: "$1例外<"
    pattern: "/(<h3(?: [^>]*)?>)Exceptions</"
  - expected: "$1戻り値<"
    pattern: "/(<h3(?: [^>]*)?>)Return value</"
  - expected: "$1結果<"
    pattern: "/(<h3(?: [^>]*)?>)Result</"
  - expected: "$1形式的構文<"
    pattern: "/(<h3(?: [^>]*)?>)Formal syntax</"
  # DOM Elements
  - expected: "$1イベントハンドラー<"
    pattern: "/(<h3(?: [^>]*)?>)Event handlers</"
  # Learning Area
  - expected: "$1アクティブラーニング:<"
    pattern: "/(<h2(?: [^>]*)?>)Active learning:</"
  - expected: "$1前提条件:<"
    pattern: "/(<th(?: [^>]*)?>)Prerequisites:</"
  - expected: "$1目的:<"
    pattern: "/(<th(?: [^>]*)?>)Objective:</"
  - expected: "$1このモジュール内<"
    pattern: "/(<h2(?: [^>]*)?>)In this module</"
  - expected: "$1環境変数:$2<"
    pattern: "/(<p(?: [^>]*)?>)Environment variable:(.*)</"
  # Glossary
  - expected: "$1関連項目<"
    pattern: "/(<h2(?: [^>]*)?>)Learn more</"
  - expected: "$1一般知識<"
    pattern: "/(<h3(?: [^>]*)?>)General knowledge</"
  - expected: "$1技術リファレンス<"
    pattern: "/(<h3(?: [^>]*)?>)Technical reference</"
  - expected: "$1これについて学習する<"
    pattern: "/(<h3(?: [^>]*)?>)Learn about it</"
  # Web/HTML/Elements
  - expected: "$1属性<"
    pattern: "/(<h2(?: [^>]*)?>)Attributes</"
  - expected: "$1スクリプティング<"
    pattern: "/(<h2(?: [^>]*)?>)Scripting</"
  # Web/Events
  - expected: "$1基本情報<"
    pattern: "/(<h2(?: [^>]*)?>)General info</"
  - expected: "$1関連するイベント<"
    pattern: "/(<h2(?: [^>]*)?>)Related Events</"
  - expected: "$1仕様<"
    pattern: "/(<dt(?: [^>]*)?>)Specification</"
  - expected: "$1インターフェイス<"
    pattern: "/(<dt(?: [^>]*)?>)Interface</"
  - expected: "$1バブリング<"
    pattern: "/(<dt(?: [^>]*)?>)Bubbles</"
  - expected: "$1キャンセル可能か<"
    pattern: "/(<dt(?: [^>]*)?>)Cancelable</"
  - expected: "$1ターゲット<"
    pattern: "/(<dt(?: [^>]*)?>)Target</"
  - expected: "$1既定の動作<"
    pattern: "/(<dt(?: [^>]*)?>)Default Action</"
  - expected: "$1なし<"
    pattern: "/(<dd(?: [^>]*)?>)None</"
  # Web/CSS
  - expected: "$1アクセシビリティへの配慮<"
    pattern: "/(<h2(?: [^>]*)?>)Accessibility concerns</"
  - expected: "/* &lt;$1&gt; 値 */"
    pattern: "/\\/\\* +&lt;(\\w+)&gt; values? +\\*\\//"
  - expected: "/* キーワード値 */"
    pattern: "/\\/\\* +Keyword values? +\\*\\//"
  - expected: "/* グローバル値 */"
    pattern: "/\\/\\* +Global values? +\\*\\//"

@mfuji09
Copy link

mfuji09 commented Feb 28, 2022

見出しのidを英語のままにするための ## hoge →

hoge

変換

Markdown化以降、IDは各国語に翻訳することになったようです。
実際、EmbedLiveSample()などのマクロも、IDではなく文書構造で引用部分を決定するようになりましたし、Page()マクロも廃止が進んでいます。

@unarist
Copy link
Contributor Author

unarist commented Feb 28, 2022

おっと、そんなことになっていたんですね。手間が減っていい話。

Wikiにもこの書き換えの話が残っていたので、折を見て修正するとよさそうですね。

@potappo potappo added the MDN label Feb 28, 2022
@potappo
Copy link
Member

potappo commented Feb 28, 2022

Wikiにもこの書き換えの話が残っていたので、折を見て修正するとよさそうですね。

ひとまず、改善されたという情報と、ここへのリンクだけ追加しておきました。来月以降に追加修正します。

@mongolyy
Copy link
Member

@unarist

cloneする人向け

普段使っているのがVS Codeでないこともあって、ローカルでチェックできるツールをtextlint + prhで作ってみました(unaristさんも作っていればすみません 🙇 )
prhのルールはunaristさん作のものを参考にさせていただきました。
https://github.com/mongolyy/mdn-textlint-ja/tree/main

meetupでhmatrjp(濱崎)さんらに、作ったものをどうすればいいか伺ったところ、お役立ちツールのところ( https://github.com/mozilla-japan/translation/tree/master/MDN )に移動させたらいいのでは?と、アドバイス頂いたのでそうしようと思っています。
「こうした方がいいよ!」みたいなご意見ありますか?
@hmatrjp

@hmatrjp
Copy link
Member

hmatrjp commented Mar 12, 2022

参考のため mongolyyさんの投稿に補足しておくと、mongolyyさんにも、Uemmra3 にお願いしてこのリポジトリ(mozilla-japan/translation)の権限を付与する予定です。

unaristさん作の TranslationHelper.user.js は、コードがリポジトリに入っていることと、Project も使ってますね。
https://github.com/mozilla-japan/translation/projects/1

それから、Issue にも、TranslationHelper 用のラベルが設定してあります。
このあたりは、権限付与されると、mongolyyさん自身で設定できるようになります。 (edited)

@potappo
Copy link
Member

potappo commented Oct 22, 2022

レビューしていて、新規参加者の方だと空白が足りないなどの同じような指摘があるので、mongolyy さんのツールをちょっと動かしてみようと思ったら、インストールで警告が出たので、issue を立てました。

mongolyy/mdn-textlint-ja#1

モジュールのバージョンアップとかで解決するのだと思うのですが、手元に本格的な node 開発環境がないのでひとまず現時点での調査結果を貼り付けています。

@potappo
Copy link
Member

potappo commented Oct 24, 2022

mongolyy さんのツールが使えるようになったので、以下、メモ書きです。翻訳ガイドか Wiki のどちらかに改めてまとめます。

  • mdn-textlint-ja をチェックツールとして紹介する。textlintプラグインを複数含んでいるので、プラグインを個別に使っても良いかもしれません的なことを書く。空白チェックは textlint-rule-ja-space-between-half-and-full-width。
    • textlint-rule-preset-ja-technical-writing のルールチェックで出る日本語表記関係のエラーに従うことは必ずしも必須ではない(よい文章とするために参考にはなるが、MDN 日本語版ではそこまで厳密にルール化していないものもある)ので、参考程度に、の但し書きが必要。

@unarist
Copy link
Contributor Author

unarist commented Oct 25, 2022

prhのルールはunaristさん作のものを参考にさせていただきました。

@mongolyy 活用していただきありがとうございます!

多分あれHTMLタグがpatternに含まれているものは textlint-rule-prh だと動かない(タグを除去したあとのテキストに対して適用された気がする)…というか、今はHTMLほとんど登場しないと思うので、その辺は削るか直すかするとよいはず。。

@mongolyy
Copy link
Member

@unarist
アドバイスありがとうございました。

今はHTMLほとんど登場しないと思うので、その辺は削るか直すかするとよいはず

確かに動作しないことが確認されたので、パターンからHTMLタグは削除しました。
mongolyy/mdn-textlint-ja#6

@Uemmra3
Copy link
Contributor

Uemmra3 commented Nov 21, 2022 via email

@mongolyy
Copy link
Member

mongolyy commented Jan 9, 2023

@hmatrjp

こんにちは、本件(新しい方の権限追加)まだ対応必要そうでしょうか?

今のリポジトリ(mongolyy/mdn-textlint-ja)から当初想定していたリポジトリ(mozilla-japan/translation)にツールを移動してもいいと思っています、いかがしましょうかね?
@Uemmra3

@hmatrjp
Copy link
Member

hmatrjp commented Jan 10, 2023

mozilla-japan/translation の下(TranslationHelper.user.js の入っている MDN と並列)に、一つディレクトリを作って、格納したら良いのではと思います。Readme.md は専用のものがあったほうが良いと思うので。

@hmatrjp
Copy link
Member

hmatrjp commented Jan 10, 2023

このリポジトリに対して Admin アクセスがあるので、必要な操作はできると思いますが、なにかわからないことがあればまた随時どうぞ。 @mongolyy

@mongolyy
Copy link
Member

@hmatrjp

mozilla-japan/translation の下(TranslationHelper.user.js の入っている MDN と並列)に、一つディレクトリを作って、格納したら良いのではと思います。Readme.md は専用のものがあったほうが良いと思うので。

アドバイスありがとうございます。
週末にやってみようと思います 🙇

このリポジトリに対して Admin アクセスがあるので、必要な操作はできると思います

失礼いたしました 🙇

@mongolyy
Copy link
Member

@hmatrjp
権限的には私でもマージできるように思いますが、念のためプルリクエストを作成いたしました。
お時間あるときで構わないのでレビューをお願いいたします 🙇
#673
@potappo

@hmatrjp
Copy link
Member

hmatrjp commented Feb 18, 2023

#673 が閉じて、
https://github.com/mozilla-japan/translation/tree/master/MDN/textlint
に追加され、一段落しているようですので、こちらも一度閉じます。
必要でしたら再オープンしてください。

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

No branches or pull requests

6 participants