2012年2月20日月曜日

GNOME の String Freeze をおさらいする

最近、意図しない形で String Freeze にわずらわされてしまい、調べていくなかで自分でもちゃんと理解していなかったことがいくつかわかったので、備忘録として String Freeze についておさらいしておこうと思う。
ついでに、i18n、翻訳に関わっている/関わりたい人や、GNOMEデベロッパー(やコミッター)になりたい人の参考にもなれば幸いである。


何?

String Freeze とは、モジュール開発において、「翻訳対象」文字列の追加や変更を制限することである。
それが必要となる理由がわからなければ、翻訳者になれば実感できるので、これを機会に参加しよう。


どんな制限か、もうちょっと正確に

次の2点が制限される。

  • 翻訳対象メッセージを新規に追加すること
  • すでに存在するメッセージを修正すること

上記は原則やっちゃいけないことになる。
ただし、どうしても対処する必要があれば、翻訳プロジェクト(GTP)コーディネーターの同意を得た上で、リリースチームおよびドキュメンテーションチームへ通知を行えば、一時的に String Freezeを解除することができる。
GTPの許可は、gnome-i18n@ 上で行われるため、翻訳メンバーはSring Freeze解除を事前に把握しておくことができる。また、実際に変更がコミットされた場合は、String Freezeブレークの通知がgnome-i18n@に自動送信される。それを契機に翻訳作業に着手できる。

一方で、以下のケースは、String Freezeを破ることに該当しないので、開発者は好き放題更新してよい。もちろんString Freezeブレークの通知などもない。

  • 翻訳対象でない文字列の操作 (=> PO影響なし)
  • 翻訳対象メッセージの削除 (=> PO影響あり Obsoleteになる)
  • 翻訳者向けコメントの追加 (=> PO影響あり コメントが追記される)
  • すでに存在するメッセージと同一内容メッセージの追加 (=> PO影響あり、ロケーションが追加される)
  • ドキュメントの更新


さらに、ちょっと微妙なケースもある (よく揉めるところ)。
以下のケースは、String Freeze ブレークに袖が引っかかっているけれど、明示的な許可なくやってもかまわないことになっている。

  • すでに存在する翻訳対象で「ない」文字列を、翻訳対象メッセージとする (gettextのラッピング忘れの対処など)
  • POTFILES.in に記載が漏れていたファイルの追記 (全く新規ファイルの追記はダメ)
  • domain の変更 (おそらくこれはかなりレアケースだと思う)

上記は、翻訳対象メッセージに変更があった旨の通知がgnome-i18n@に送信される。特に一番目のケースはモジュールメンテナーでもなければそれが新規追加のメッセージなのかどうか即座にわからないともあるので、該当のコミットがGTPの許可を得たものかどうかでしばしば揉める原因となる。そのため、余計な手間や混乱を招かないためには、このケースであってもGTPに通知しておくことが望ましいとされている。


フリーズ対象のモジュールはどれ?

一言で言うと、Damned Lies の「開発版」のリリースセットに含まれるモジュールが該当する。それ以外はSstring Freezeになることはない。モジュールメンテナーがString Freezeしたことを通知することがあるが、それは単なる親切心であったり、ここでいうString Freezeの制約などは一切ない。


フリーズはいつ始まる?

リリーススケジュールに具体的な日時が明記されているので、それを参照のこと。
その日時を持って、該当するモジュールのmasterブランチは一斉にフリーズとなる。


フリーズはいつ終わる?

フリーズ終了のタイミングはモジュール毎に変わる。
リリースの前後に

  • gnome-x-y という名称のブランチを作成する (x, yはリリースバージョンの番号)
  • 「このコミットをもってgnome-x-yのブランチを作成した」という通知をgnome-i18n@に送信する

を行うことが、終了条件となる。これによって、フリーズがgnome-x-yブランチに引き継がれ、masterは String Freezeが解除される。 なお、リリースの前だろうが、後だろうが、モジュール次第である。

ちなみに、今回String Freezeに煩わされたというのは、String Freezeの解除をしていなかったモジュールがあり、それを知らずにメッセージを操作してしまい、gnome-i18n@に通知が飛んでしまったということである。


参考

http://mail.gnome.org/archives/gnome-i18n/2012-February/msg00047.html
https://live.gnome.org/TranslationProject/HandlingStringFreezes
https://live.gnome.org/ReleasePlanning/Freezes#String_Freeze