この記事では、Androidアプリケーションをローカライズする際にGoogleスプレッドシートを使用した小さな経験を共有したいと思います。 最初は、開発したアプリケーションを顧客の言語にのみ翻訳する必要がありました。つまり、 ノルウェー語 現時点では、IntelliJ Ideaには翻訳エディターがなく、Android Studioはベータ版を終了する準備をしていました。
議論の対象ではない顧客の主な要件は、翻訳者が翻訳にできる限り少ない時間を費やすべきであるという事実でした。 そのため、翻訳者は翻訳用の行をテーブルに提供する必要があり、必要なすべてを翻訳してから、必要なことを何でもします。 彼はSCMは言うまでもなく、追加のソフトウェアをインストールできませんでした。
TL; DR 完成したドキュメント 。 strings.xmlファイルを取得するには、[ファイルのエクスポート]-> [strings.xmlへのシートのエクスポート]をクリックします。 Googleドライブアプリは、マシンにインストールする必要があり、結果をダウンロードします。
最初は、簡単なExcelドキュメントを翻訳に使用し、電子メールで翻訳者とやり取りするためにピンポンを使用しました。 strings.xmlからテーブルに〜100行を手動で転送した後、この恥ずべきレッスンを続けたいという希望はなくなりました。 XMLからテーブルへのインポートは、Excel を使用して実装されました。 将来、このドキュメントはロジックで大きくなりすぎました。新しく追加された行を視覚化するためのさまざまな種類の条件付き書式、行のキーの名前が変更された状況のサポート。
ただし、この構造全体に1つの大きな欠点がありました-バージョン管理の欠如。 翻訳者は、翻訳済みの行と、この翻訳を入力する必要がある空のセルを含む翻訳用の新しいファイルを受け取りました。 さらに2つの言語(スウェーデン語とデンマーク語)が追加されたとき、すべてが銅の流域で覆われていました。 かつて、3人の翻訳者からの3つのドキュメントをマージするときに、列を運転しました。このため、間違った翻訳がほとんどリリースされました。
その結果、顧客からスティックが届き、新しい要件も追加されました。テーブルには複雑なロジックはなく、キー、英語ソース、ノルウェー語、スウェーデン語、デンマーク語の翻訳の4列のみです。 各翻訳者からのドキュメントの複数のコピーに関する問題を回避するために、私は顧客にGoogleスプレッドシートを使用するよう説得しました。 手動で翻訳をstrings.xmlにエクスポートすることはもうありませんでした-翻訳の異なるコピーの不幸なマージの後、額の汗がモニターを見つめた後、行の矛盾を探すことに満足していました。 その後、GoogleサービスがJSのような言語であるGoogle Scriptで拡張機能を書くのは非常に簡単であることが判明しました。
当然、私はこの問題を解決する既製のサービスを探していました。 Googleの最初の3つのリンクとSOへの回答では、満足のいく結果が得られませんでした。 ちなみに、Googleスプレッドシートへの移行時に、Ideaの新しいバージョンがリリースされ、そこで翻訳エディターが登場しました。これにより、作業が少し楽になりました。
そこで、キー、英語、ノルウェー語、スウェーデン語、デンマーク語、コメントの5つの列を持つGoogleドキュメントでテーブルが作成され、アクセス権が配布されました。 プロジェクトからテーブルにデータを配置するには、翻訳エディターですべてを選択し、テーブルエディターに貼り付け、余分な列を削除し(翻訳不可-使用しません)、結果をGoogleドキュメントに貼り付ける必要があります。 また、プロジェクトは独自の翻訳を含む複数のモジュールで構成されているため、ドキュメントには2つのタブがあり、説明されている操作は各プロジェクトで1回実行する必要があります。
その結果、翻訳用の行を持つテーブルが作成され、翻訳者は簡単に一緒に編集できます。 翻訳が完了したら、結果をプロジェクトに戻す必要があります。 一度にすべてを手に入れる方法を考え始めました。 私が行く準備ができていた最大の努力は1部です。 私に起こった唯一の解決策は、結果をGoogleドライブにエクスポートすることでした。そこから、デスクトップアプリケーションがPCの結果を引き出します。 フォルダーの正しい階層が以前に作成されていた場合は、strings.xmlファイルを1つのアクションでコピーして上書きできます。 ここでは、小さなスクリプトを記述せずに行うことはできません。
[ツール]-> [スクリプトエディター]をクリックし、ブラウザーで直接オートコンプリートとデバッグを行う、ほぼ本格的なIDEを使用します。 UI googleテーブルに追加メニューを作成する小さなコードも作成しました。 この要素をクリックすると、エントリポイントになります。
function onOpen() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{ name : "Export Sheets To strings.xml", functionName : "readAndExport" }]; spreadsheet.addMenu("Export Files", entries); };
次に、単純なコードはシート(タブ)を通過し、列ヘッダーを読み取り、セル内の値からxml文字列をコンパイルし、ディレクトリtrunk / [sheet_name] / res / values- [column_name] / stringsのGoogleドライブのstrings.xmlファイルに書き込みます。 .xml。 ソースコード自体は、提供されたファイルで直接表示できます。 珍しいことに、Googleドライブではディレクトリまたはファイルの名前が一意ではない、つまり 同じ名前の2つのファイルまたはディレクトリを作成できます。 すべてが正しく機能するには、次のコードのようなものを使用する必要があります。
function getOrCreate(root, name) { var iterator = root.getFoldersByName(name); if(iterator.hasNext()) { return iterator.next(); } else { return root.createFolder(name); } }
おわりに
Google Appsには、本当にシンプルで強力なAPIがあります。 もう1つの利点は、すぐに使用できるGoogleアプリケーションのAPI(カレンダー、ディスク、メールなど)にアクセスできることです。 できるだけ早く、アプリケーションをローカライズするためのシンプルで便利なツールを作成しました。 もちろん、改善したいところはまだありますが、最も重要な問題を取り除きました。同じ構造と名前を持つ多くのファイルをコピーして編集します。 これは必然的に不注意によるエラーにつながりました。