@@ -241,6 +241,85 @@ else:
241
241
242
242
** 注意** : この最終チェックを省略してはいけません。翻訳作業の品質保証において必須の手順です。
243
243
244
+ # ## 4.4 翻訳漏れ防止のための必須手順
245
+
246
+ 翻訳漏れを完全に防ぐため、以下の手順を** 必ず** 実行してください:
247
+
248
+ # ### 翻訳作業開始前の事前確認
249
+
250
+ 1 . ** 重複エントリの検出** :
251
+ ```bash
252
+ # 同じmsgidが複数回登場していないかチェック
253
+ rg - o ' msgid "[^"]*"' ファイル名.po | sort | uniq - d
254
+ ```
255
+
256
+ 2 . ** 未翻訳エントリの総数把握** :
257
+ ``` bash
258
+ # 翻訳前の未翻訳エントリ数を記録
259
+ python3 -c "
260
+ import re
261
+ with open('ファイル名.po', 'r', encoding='utf-8') as f:
262
+ content = f.read()
263
+ print(f'翻訳前未翻訳エントリ数: {len(re.findall(r\" msgstr \\\"\\\"\" , content))}')
264
+ "
265
+ ```
266
+
267
+ #### 翻訳作業中の段階的確認
268
+
269
+ 3 . ** 定期的な進捗確認** :
270
+ - 50エントリごとに翻訳状況をチェック
271
+ - 重複エントリを発見した場合は** すべて** 翻訳する
272
+
273
+ 4 . ** 分割ファイル処理時の特別措置** :
274
+ - 各分割ファイルの翻訳完了後、即座に未翻訳エントリ数をチェック
275
+ - 結合前に各分割ファイルの翻訳完了を確認
276
+
277
+ #### 翻訳作業完了前の厳格な最終チェック
278
+
279
+ 5 . ** 最終チェックスクリプト(改良版)** :
280
+ ``` python
281
+ python3 - c "
282
+ import re
283
+ with open (' ファイル名.po' , ' r' , encoding = ' utf-8' ) as f:
284
+ content = f.read()
285
+
286
+ # 重複エントリも含めてすべての未翻訳エントリをチェック
287
+ all_entries = re.findall(r ' ( #: [^ \n ]+ \n msgid[^ m ]+? msgstr \"\" ) ' , content, re.DOTALL )
288
+ untranslated_text = []
289
+
290
+ for entry in all_entries:
291
+ # コードサンプルを除外
292
+ if not any (marker in entry for marker in [' def ' , ' class ' , ' assert ' , ' print(' , ' return ' , ' >>>' , ' import ' , ' raise ' ]):
293
+ untranslated_text.append(entry[:200 ])
294
+
295
+ print (f ' 未翻訳テキストエントリ数: { len (untranslated_text)} ' )
296
+ if untranslated_text:
297
+ print (' \\ n未翻訳エントリ:' )
298
+ for i, entry in enumerate (untranslated_text, 1 ):
299
+ print (f ' { i} : { entry} ... ' )
300
+ print (' ---' )
301
+ print (' \\ n⚠️ これらのエントリを翻訳してから作業を完了してください。' )
302
+ else :
303
+ print (' ✅ すべての翻訳対象エントリが翻訳済みです!' )
304
+ "
305
+ ```
306
+
307
+ # ### 品質保証のための二重チェック
308
+
309
+ 6 . ** 翻訳完了後の検証** :
310
+ - 翻訳前後の未翻訳エントリ数の差分を確認
311
+ - 重複エントリがすべて翻訳されていることを確認
312
+ - 既存翻訳の品質向上も完了していることを確認
313
+
314
+ # ### 緊急時の対応
315
+
316
+ 7 . ** 翻訳漏れ発見時の対応** :
317
+ - 発見した未翻訳エントリを即座に記録
318
+ - 同じ`msgid` の他のエントリも確認
319
+ - 翻訳完了まで作業を継続
320
+
321
+ ** 重要** : この手順を省略することは品質保証上許可されません。すべての翻訳対象エントリが完了するまで作業を継続してください。
322
+
244
323
# # Repository Structure
245
324
246
325
The repository is organized as follows:
0 commit comments