背景
業務でExcelファイルを日本語→中国語・ベトナム語に翻訳する機会があり、最初は「セルの文字列だけDeepL APIに投げればいいのでは」と思っていたのですが、実際にやってみると以下の壁にぶつかりました。
1. セルの中身を書き換えるだけでは済まない
Excel(.xlsx)は中身がZIP+XMLの集合体(OOXML)です。セルのテキストを素朴に置き換えるだけだと、以下が崩れます。
-
数式セル:
="点検実施日:"&TEXT(TODAY(),"yyyy/mm/dd")のように、文字列リテラルと数式が混在しているセル。文字列部分だけを翻訳し、数式構造は保つ必要がある - 結合セル:翻訳後にセル参照がズレることがある
-
図形・画像のアンカー:
xdr:twoCellAnchorのグループ図形がネストしていると、umya-spreadsheet(Rust製のxlsx処理ライブラリ)の一部バージョンで読み書きの往復時に座標がズレることを実際に確認しました
2. 翻訳エンジンごとの癖
DeepL・Google Translate・Amazon Translateを比較検証した際に見えてきた挙動差です。
| エンジン | 癖 |
|---|---|
| Google Translate API v2 | セル内改行(Alt+Enter)を保持できない。仕様上の既知の制約 |
| DeepL | 分割翻訳(セル内を区切って部分翻訳)非対応。文脈翻訳のみ |
| 各社共通 | 短すぎる文字列(記号のみ等)を翻訳せず原文のまま返すことがあり、「翻訳成功」と誤判定しないよう、原文と訳文の完全一致チェックが必要 |
3. 実際に作ったもの
上記を踏まえて、Excelの構造を保持したまま複数の翻訳エンジンを比較・選択できるツールを作りました。日本語⇄中国語・日本語⇄ベトナム語に対応しています。
セル単位で複数エンジンの翻訳候補を比較し、良いものを選んで反映する、という2段階の処理(Generate→Apply)にしているのがポイントです。1発で完全自動翻訳するのではなく、人が確認できる余地を残す設計にしました。
まとめ
Excelの多言語対応は「テキストを翻訳する」だけでなく、「OOXML構造をどう壊さないか」の方が実装上の比重が大きい、というのが実際にやってみた感想です。同じ課題に当たっている方の参考になれば幸いです。