
こんにちは、私の名前はアレクサンダーで、Androidアプリケーション開発者です。 11のインターフェース言語と600行を超えるプロジェクトに参加しました。 顧客側にはプログラマーがいなかったため、すべてをExcelスプレッドシートに保存しました。 彼らがその中の何かを変更したとき、彼らは「私たちはそれぞれ黄色と黄色の変更でセルを強調表示し、AndroidとiOSのアプリケーションをそれぞれ更新する」という言葉でこの表を送りました。 その後、2人の開発者が数時間を失い、手動で変更を加えました。 そして、誰かがどこかで何かを忘れていたり、間違えたり、それを終わらせなかったり、プラットフォーム間に矛盾があったり、顧客が緊張したり、開発者がびっくりしたりすることが判明しました。 この状況は根本的に私には適さず、Excelからの行のアンロードを自動化する方法を探し始めました。 その結果、すばらしいVBScriptコードが完成しましたが、今でも使用しています。 次に、このスクリプトを紹介します。 カットの下に、いくつかの写真とスクリプトコードがあります。
そのため、まずテーブル自体を見て、問題の規模を評価します。

そこに彼女は美人だ! ご覧のとおり、いくつかのサービス列、グローバル回線名、およびそれらの翻訳があります。 さらに、一部の行は英語とドイツ語でのみ表示されます。これは、アプリケーションのバージョン2.0では、顧客が現在のところ2つの言語のみを残し、残りを後で追加することを決定したためです。 または多分彼は翻訳者のためにお金を同情します。 しかし、これは彼のビジネスですが、これを考慮に入れる必要があります。 つまり、スクリプトは空のセルをスキップし、そのような言語の空の行を作成しないでください。 さらに、セルF5の「%s」などの書式設定文字も考慮する必要があります。 iOSでAndroidが得意とするものは「%@」に置き換える必要があるため、これらのユーザーと協力する必要があります。 途中で他のニュアンスについて説明します。
衰弱せず、猫を尻尾で引っ張らないように、今すぐスクリプト全体を投稿します。
今こそ、ニュアンスを体験する時です。
このアプリケーションには、いくつかのユーザー権限が必要です。 iOSでは、これらの許可を要求するための行はLocalizable.stringsではなくInfoPlist.stringsに通常格納されているため、スクリプトの最初でInfoPlistに配置される行の名前を定義します。
Const NsCameraUsageDescription = "NsCameraUsageDescription" Const NSLocationAlwaysAndWhenInUseUsageDescription = "NSLocationAlwaysAndWhenInUseUsageDescription" Const NSLocationAlwaysUsageDescription = "NSLocationAlwaysUsageDescription" Const NSLocationWhenInUseUsageDescription = "NSLocationWhenInUseUsageDescription" Const NSPhotoLibraryAddUsageDescription = "NSPhotoLibraryAddUsageDescription" Const NSPhotoLibraryUsageDescription = "NSPhotoLibraryUsageDescription"
次に注目すべきフラグメントは、すべてのファイルが保存されるフォルダーの名前です。 iOSでは、すべてのフォルダーに「en.lproj」、「de.lproj」などの2文字の言語指定が付いています。 ロシア語以外のすべてはここに「ru-RU」です。 また、テーブル自体の列はAndroid表記です。 したがって、parsim:
If objFSOandroid = "values" Then objFSOios = "en" & ".lproj" ElseIf objFSOandroid = "values-ru" Then objFSOios = "ru-RU" & ".lproj" Else objFSOios = Right(objFSOandroid,2) & ".lproj" End If
そして最後のタスク、キャラクターの置き換えとエスケープ。 iOSの場合、私が言ったように、 %sを%@に変更し、引用符とアポストロフィをエスケープします。
iOSString = Replace(oTranslations.Sheets(1).Cells(nCounter, LanguageColumnIndex).Value, "%s", "%@") iOSString = Replace(iOSString, "'", "\'") iOSString = Replace(iOSString, chr(34), "\" & chr(34))
Androidでは、アポストロフィをエスケープし、いわゆる改行文字( Chr(10) )を通常の改行文字\ nに置き換えます。 そして、これには理由があります。 セルの1つには、かなり大きなテキストがあり、顧客がMS Wordでコンパイルし、テクニカルコピーペーストを使用してExcelセルに配置しました。 そして、試行錯誤による適切な置き換えを見つけることができませんでしたが、iOSでは必要な段落にテキストが表示され、Androidでは1つの段落にマージされました。
おわりに
おそらく既に推測したように、スクリプトはWindowsコマンドラインで実行されます。 簡単にするために、スクリプトと.xlsxファイルを1つのフォルダーに入れ、コマンドラインに移動してコマンドを記述します。
cscript ConvertExcelToTXTandXML.vbs <filename>.xlsx
次に、Enterキーを押して、プログラムの各ステップのコマンドウィンドウに表示されるドットの形で、スクリプトの美しい視覚化をお楽しみください。 スクリプトの巨大な作業の結果、「ios」と「res」の2つのフォルダーが作成され、その内容はそれぞれiOSプロジェクトとAndroidプロジェクトにコピーされます。
以上です。 このスクリプトが誰かにとって有用であり、多くの時間を節約することを願っています。