昨日20のプロジェクト、20の言語、締め切り。 パート2

継続的なローカライズの設定に関する一連の記事の続き。 ここで最初のものを見つけることができます。 この記事では、サンプルテストプロジェクトを使用して、Serge-Smartcat-GitLabバンドルを統合し、Serge構成ファイルを構成する方法を説明します。 Ubuntuの手順。







vagrantfileを介したインストール



Ubuntuを手元に持っているサーバーがない場合は、Vagrantを使用できます。 仕組み:







  1. 指示に従って VagrantとVirtualBoxをインストールします。
  2. vagrantfileとbashスクリプトをダウンロードします。
  3. 指示に従って vagrantfileを起動します


Vagrantビルドの結果は、SergeがSmartcatプラグインとともにインストールされるUbuntuを備えた仮想マシンです。 必要なすべてのファイルがコピーされ、sshキーが作成されます。 プロジェクトのセットアップとアプリケーションの起動にすぐに進むことができます。







手動インストール



ユーザー作成



サージユーザーグループを作成します。







sudo groupadd serge
      
      





ホームディレクトリ/ usr / local / sergeでsergeユーザーを作成します。







 sudo useradd -g serge serge -m -d /usr/local/serge
      
      





Sergeをインストール



Sergeの完全なドキュメントはこちらです。

ローカルパッケージデータベースのメタデータを更新します。







 sudo apt-get -qq update
      
      





ビルドツールと必要なパッケージをインストールします。 インストールを開始する前に、Perl 5.10以降がインストールされていることを確認してください。







 sudo apt-get -qq -y install build-essential libssl-dev libexpat-dev unzip wget
      
      





sergeユーザーのホームディレクトリに移動し、必要な依存関係をすべて備えたSergeをインストールします。







 cd /usr/local/serge sudo -u serge wget https://github.com/evernote/serge/archive/master.zip -O serge-master.zip sudo -u serge unzip serge-master.zip sudo -u serge unlink serge-master.zip cd serge-master sudo cpan App::cpanminus sudo cpanm --installdeps . sudo -u serge sudo ln -s /usr/local/serge/serge-master/bin/serge /usr/local/bin/serge
      
      





Smartcatプラグインのインストール



 sudo cpanm HTTP::Daemon@6.01 sudo cpanm Serge::Sync::Plugin::TranslationService::Smartcat sudo cpan install LWP::Protocol::https
      
      





キー作成



sergeユーザーがGitLabで使用するsshキーを使用して、sergeユーザーを作成します。







 sudo -u serge ssh-keygen -t rsa -N "" -f .id_rsa_serge
      
      





GitLabとの統合



GitLabでsergeユーザーを作成し、すべての開発者リポジトリに追加します。

id_rsa_serge.pubファイルからGitLabのsergeユーザープロファイル設定にsshキーをコピーします。 これは、SergeがGitLabで文字列を送受信できるようにするために必要です。







インストールが完了しました!







Smartcat統合



開始するには、以下を行う必要があります。







  1. Smartcatにサインアップします
  2. 翻訳する言語を指定してプロジェクトを作成します。 プラグインをセットアップするとき、Smartcatで使用される言語コードが必要になります
  3. project_idtokenおよびtoken_idを取得します。
  4. support@smartcat.aiに書き込み、Sergeファイル解析サポートを有効にするように依頼します


Serge-Smartcatの構成



セットアップに進む前に、一般的な動作原理を説明します。 標準のローカライズサイクルには5つのステップが含まれます。

画像









Sergeおよびgitリポジトリ



Sergeはどの行を翻訳のために送信するのかをどのように知るのですか 新しい行を決定するために、標準のgitツールが使用されます:masterブランチと現在のブランチの違いが取られます。 差分は翻訳のために送信されます。







画像







重要 :原則として、masterブランチは保護されているため、diffを定義するために追加の翻訳ブランチが使用されます。これをbase-translateと呼びます。 つまり、マスターでリリースをマージした後、マスターを追加でbase-translateに保持する必要があります。







ここには重要なポイントがあります。 一方で、開発者が翻訳の対象となる瞬間を理解するようにプロセスを構築する必要があります。それにより、techpecが円を描いて走り、頭を抱えないようにします。 そして、タイトルだけが修正されたようです。







動作原理



Sergeはリポジトリに入り、すべてのブランチを取得し、それらをマスターブランチと比較し始めます。 diffが見つかった各ブランチに対して、Smartcatプロジェクトで翻訳するドキュメントのセットを作成します。 関係のないブランチの混inにとらわれず、各開発者の近くに「ブランチを削除したことを覚えていますか?」という質問を立てないために、プレフィックスを使用すると便利です。 たとえば、Sergeは、 translate-プレフィックスを持つブランチでのみ機能します。







また、翻訳の準備ができている既読および承認済みのテキストが、prefix translateのブランチに分類されることも重要です。 結局のところ、コミットの履歴を解析したい人は誰もいません。彼らはどんな種類のテキストで、なぜdiffはこのように見えるのか理解しようとしませんか?







コンテンツの準備



コンテンツ準備プロセスは次のとおりです。







画像







問題の声明。 タスクが定式化段階にあるとき、テキストがすでにそこに表示されている場合がありますが、そのテキストは変更されずにアプリケーションで終了するはずです。 もしそうなら、コピーライターとテクニカルライターがそれらを完成させるのを手伝います。







レイアウトの開発。 デザイナーがレイアウトを準備すると、テクニカルライターとコピーライターがすべてのテキストを読み上げました。 したがって、英語の推定レイアウトは開発に分類されます。 開発者はテキストについて考える必要はなく、レイアウトから既製の行を取得するだけです。







開発。 残念ながら、前の手順ではすべての可能な種類のテキストを網羅することはできません。 たとえば、レイアウトにはバリデータ、APIエラー、一部のモーダルウィンドウは含まれません。 開発プロセス中に行を追加する必要があった場合、テクニカルライターとコピーライターは必要なすべてのテキストを開発者に提供します。







したがって、ある時点で、開発中のコードの一部に必要なすべての新しいテキストがブランチに含まれている状態になります。 この時点で、prefix translate-を使用して新しいブランチが作成され、Sergeは翻訳プロセスを開始できます。 翻訳の準備ができると、開発者は翻訳ブランチから翻訳を取得し、チームで受け入れられたgitフローに基づいて行動します。







このプロセスにより、開発者のローカリゼーションプロセスへの関与が最小限に抑えられ、手作業の量も最小限に抑えられます。ブランチを作成するだけで済みます。







チューニングプロセスの詳細な説明は、チームが同様の配置とプロセスを持っているという事実に大きく依存しています。







プロジェクトのセットアップ



サージとしてログイン:







 sudo -Hu serge -i
      
      





グループディレクトリを作成します。







 mkdir groups
      
      





このディレクトリは、GitLabのリポジトリに対応するプロジェクトをホストします。 リポジトリグループとその場所の構造を繰り返して、ナビゲーションを容易にすることは理にかなっています。







最初のプロジェクトのディレクトリを作成します。







 cd groups mkdir myproject cd myproject
      
      





Serge構成ファイルをコピーします。 真夜中の司令官をインストールし、ファイルマネージャーを使用してファイルを管理できます。 MCをインストールする前に、sergeアカウントからログアウトする必要があります。







 exit sudo apt install mc sudo -Hu serge -i
      
      





/ usr / local / serge / serge-master / bin / tools / feature-branch-config-generatorからコピーするファイル:









 cp /usr/local/serge/serge-master/bin/tools/feature-branch-config-generator/{myproject.cfg,myproject.inc,myproject.serge.tmpl,myproject_branches.txt} /usr/local/serge/serge-master/groups/myproject cp /usr/local/serge/serge-master/bin/tools/feature-branch-config-generator/fbcgen.pl /usr/local/serge/serge-master/
      
      





プラグインログを記録するためのファイルを作成します。







 mkdir log cd log touch smartcat.log
      
      





myproject.incを構成する





myproject.serge.tmplを構成します





重要! source_path_prefixでは、終点はpoint%FBCGEN_BRANCHでなければなりません。







Smartcatプラグインの呼び出しは、適切なセクションmyproject.serge.tmplに追加する必要があります







 sync { ts { plugin Smartcat data { project_id 12345678-1234-1234-1234-1234567890123 token_id 12345678-1234-1234-1234-1234567890123 token 1_qwertyuiopasdfghjklzxcvbn push { disassemble_algorithm_name Serge.io PO } pull { complete_projects NO complete_documents YES } log_file ./log/smartcat.log } }
      
      





いくつかのパラメーターの説明:









カスタムプロジェクトの例



以下は、6言語のプロジェクトの構成ファイルです。 プロジェクトは、ソース行をjs形式で保存します。 5文字のファイル命名形式が使用されます。 リソースファイルへのパス:./branches/base-translate/client/src/translations。







myproject.cfg



 # This is a configuration file for fbcgen.pl # Usage: fbcgen.pl myproject.cfg # Root directory where the master branch checkout is located. # (path is relative to the location of the configuration file itself). # The local checkout should be initialized *before* fbcgen.pl is run. # You can run `serge --initialize onboarding-frontend.serge.tmpl` # to do an initial checkout of the project data. $data_dir = './branches/base-translate'; $branch_list_file = 'myproject_branches.txt'; # Where to load Serge config template from. # (path is relative to the location of the configuration file itself). $template_file = "myproject.serge.tmpl"; # Where to save the localized Serge config file. # (path is relative to the location of the configuration file itself). $output_file = "myproject.local.serge"; our $skip_branch_mask = '^(master)$'; # skip these branches unconditionally our $unmerged_branch_mask = '^(translate-)'; # process unmerged branches matching this mask our $any_branch_mask = '^(translate-)'; # additionally, process these branches even if they were merged # Filter out commits that match this mask when determining if branch is inactive. $skip_commit_mask = '^l10n@example.com'; # This sub returns a hash map of additional parameters # that can be referenced in template as `$FBCGEN_<VARIABLE_NAME>`. # For example, `EXTRA_INCLUDE` parameter generated in the function below # is referenced in `myproject.serge.tmpl` file as `$FBCGEN_EXTRA_INCLUDE`. $calculate_params = sub { my ($branch) = @_; return { # for branch names starting with `release/`, return an empty string; # otherwise, return a string that will be used in the `@include` directive EXTRA_INCLUDE => $branch =~ m!^release/! ? '' : "myproject.inc#skip-saving-localized-files\n" } }
      
      





myproject.inc



 # Here we define a job template (common parameters) that will be reused # across all jobs in the generated configuration file. # Certain job parameters (like job ID and paths) will be overridden # in each feature branch job. job-template { name JS file processing ('master' branch) id myproject.js.base-translate # master job id db_namespace myproject destination_languages ru ko de ja zh-Hans source_dir ./myproject/base-translate/res/en output_file_path ./myproject/base-translate/res/%LANG%/%FILE% source_match \.js$ parser { plugin parse_js } ts_file_path ./po/myproject/%LOCALE%/%FILE%.po callback_plugins { :feature_branch { plugin feature_branch data { master_job myproject.js.base-translate # this must match your master job id } } } } # This block will be included conditionally # for all branches except the `release/` ones (see myproject.cfg). # This allows one to skip saving localized files in non-release branches # (but still gather from them strings for translation). skip-saving-localized-files { callback_plugins { :skip-saving-localized-files { plugin process_if phase can_generate_localized_file data { if { lang_matches . then { return NO } } } } } }
      
      





myproject.serge.tmpl



 sync { ts { plugin Smartcat data { project_id %project_id% token_id %token_id% token %token% push { disassemble_algorithm_name Serge.io PO } pull { complete_projects NO complete_documents YES } } } vcs { plugin git data { local_path ./branches add_unversioned YES name L10N Robot email l10n-robot@example.com remote_path { base-translate git@gitlab.loc:common/myproject.git#base-translate /* FBCGEN_BRANCH_REMOTES $FBCGEN_DIR_PADDED git@gitlab.loc:common/myproject.git#$FBCGEN_BRANCH */ } } } } jobs { :develop { id job.base-translate name myproject source_language en destination_languages ru zh-Hans ko de ja optimizations NO source_dir ./branches/base-translate/client/src/translations source_match `en-US.js` debug NO parser { plugin parse_js } leave_untranslated_blank YES db_source DBI:SQLite:dbname=./myproject.db3 db_namespace myproject ts_file_path ./po/1bd80338-a0b5-48b3-822c-e90affd2cdcc/%LANG%/%FILE%.po output_file_path ./branches/base-translate/client/src/translations/%CULTURE%.%EXT% output_bom NO output_lang_rewrite { zh-Hans zh } callback_plugins { :feature_branch { plugin feature_branch data { master_job job.base-translate } } } } /* FBCGEN_BRANCH_JOBS :$FBCGEN_DIR { @inherit .#jobs/:develop id job.$FBCGEN_DIR $FBCGEN_EXTRA_INCLUDE source_path_prefix $FBCGEN_BRANCH. source_dir ./branches/$FBCGEN_DIR/client/src/translations/ output_file_path ./branches/$FBCGEN_DIR/client/src/translations/%CULTURE%.%EXT% } */ }
      
      





アプリケーションの起動



リポジトリを複製する







 GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" git clone -b base-translate git@gitlab.loc:groups/myproject.git branches/base-translate/
      
      





ローカリゼーションサイクル



.sergeファイルが形成されます:







 GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" /usr/local/serge/serge-master/fbcgen.pl myproject.cfg
      
      





すべてのリポジトリブランチからの変更の取得:







 GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull --initialize myproject.local.serge
      
      





Smartcatからのすべてのブランチの翻訳変更のコレクション:







 GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull-ts myproject.local.serge
      
      





データベースと.poの形成:







 GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge localize myproject.local.serge
      
      





リポジトリからSmartcatに新しいデータを送信する:







 GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push-ts myproject.local.serge
      
      





受け取った転送を適切なブランチのリポジトリに送信する:







 GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push myproject.local.serge
      
      





次の記事は、統合の特殊なケースのトラブルシューティングと説明に専念します。

最終記事: 20のプロジェクト、20の言語、昨日の締め切り。 パート3








All Articles