20 proyek, 20 bahasa, batas waktu kemarin. Bagian 2

Melanjutkan serangkaian artikel tentang pengaturan pelokalan berkelanjutan. Anda dapat menemukan yang pertama di sini . Pada artikel ini saya akan memberi tahu Anda cara mengintegrasikan bundel Serge-Smartcat-GitLab dan mengkonfigurasi file konfigurasi Serge menggunakan contoh proyek uji. Instruksi untuk Ubuntu.


Instalasi melalui vagrantfile


Jika Anda tidak memiliki server dengan Ubuntu, Anda dapat menggunakan Vagrant. Cara kerjanya:


  1. Instal Vagrant dan VirtualBox mengikuti instruksi .
  2. Unduh skrip vagrantfile dan bash.
  3. Luncurkan vagrantfile mengikuti instruksi .

Hasil build Vagrant akan menjadi mesin virtual Ubuntu tempat Serge diinstal dengan plugin Smartcat. Semua file yang diperlukan akan disalin, kunci ssh dibuat. Anda dapat segera melanjutkan untuk mengatur proyek dan meluncurkan aplikasi.


Instalasi manual


Pembuatan Pengguna


Buat grup pengguna layanan:


sudo groupadd serge 

Buat pengguna serge dengan direktori home / usr / local / serge:


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

Instal Serge


Dokumentasi lengkap Serge ada di sini .
Perbarui metadata dari database paket lokal:


 sudo apt-get -qq update 

Instal alat perakitan, serta paket yang diperlukan. Sebelum memulai instalasi, pastikan Perl 5.10 atau lebih tinggi diinstal.


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

Buka direktori home pengguna serge dan instal Serge dengan semua dependensi yang diperlukan.


 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 

Menginstal Plugin Smartcat


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

Penciptaan Kunci


Buat pengguna serge dengan kunci ssh yang akan digunakan pengguna serge di GitLab:


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

Integrasi dengan GitLab


Buat pengguna serge di GitLab dan tambahkan ke semua repositori pengembang.
Salin kunci ssh dari file id_rsa_serge.pub ke pengaturan profil pengguna serge di GitLab. Ini diperlukan agar Serge dapat menerima dan mengirim string di GitLab.


Instalasi selesai!


Integrasi Smartcat


Untuk memulai, Anda harus:


  1. Mendaftar untuk Smartcat .
  2. Buat proyek dengan menunjukkan bahasa yang ingin Anda terjemahkan. Saat mengatur plugin, Anda akan memerlukan kode bahasa yang digunakan oleh Smartcat.
  3. Dapatkan project_id , token , dan token_id .
  4. Menulis ke support@smartcat.ai dan meminta untuk mengaktifkan dukungan untuk algoritma parsing file Serge

Mengkonfigurasi Serge-Smartcat


Sebelum melanjutkan ke pengaturan, saya akan menjelaskan prinsip umum operasi. Siklus lokalisasi standar mencakup 5 langkah:
gambar


  • pull - dapatkan baris baru dari repositori.
  • pull-ts - dapatkan string lokal dari Smartcat (plugin Smartcat diaktifkan).
  • localize - semua format sumber dari repositori diuraikan dan dikonversi ke file .po, terjemahan yang diterima ditulis ke file .po. Semua baris ditulis ke database memori terjemahan Serge.
  • push-ts - baris baru yang diterima pada langkah pertama dikirim ke Smartcat (menggunakan plugin Smartcat).
  • string yang dilokalisasikan dilakukan di GitLab.
    Anda dapat menggunakan integrasi dengan sistem CAT lain, misalnya, ada plugin untuk Pootle .

Serge dan git gudang


Bagaimana Serge tahu jalur mana yang harus dikirim untuk terjemahan? Untuk menentukan baris baru, alat git standar digunakan: perbedaan antara cabang master dan yang sekarang diambil. Diff dikirim untuk terjemahan.


gambar


Penting : Sebagai aturan, cabang master dilindungi, oleh karena itu cabang terjemahan tambahan digunakan untuk mendefinisikan diff, kami menyebutnya basis-terjemahan. Yaitu, setelah rilis dilepaskan pada master, master juga harus dipegang dalam basis-terjemahan.


Ada poin penting di sini. Adalah perlu untuk membangun proses sedemikian rupa sehingga, di satu sisi, pengembang memahami apa dan pada saat apa akan pergi ke terjemahan, dan di sisi lain, sehingga techpec tidak berjalan dalam lingkaran, memegang kepalanya, karena perbedaannya adalah 1000 baris. Dan sepertinya hanya judulnya yang diperbaiki.


Prinsip kerja


Serge memasuki repositori, mengambil semua cabang, dan mulai membandingkannya dengan cabang master. Untuk setiap cabang di mana diff terdeteksi, itu membuat satu set dokumen terjemahan dalam proyek Smartcat. Agar tidak terjebak dalam kekacauan cabang yang tidak relevan dan tidak berdiri di dekat setiap pengembang dengan pertanyaan: "apakah Anda ingat untuk menghapus cabang?", Sangat nyaman untuk menggunakan awalan. Sebagai contoh, Serge hanya bekerja dengan cabang yang memiliki awalan terjemahan .


Juga penting bahwa teks-teks yang sudah dibaca dan disetujui yang siap untuk penerjemahan jatuh ke cabang dengan terjemahan awalan. Lagipula, tidak ada yang mau menguraikan sejarah commit dengan sia-sia mencoba memahami teks macam apa itu dan mengapa berbeda seperti ini?


Persiapan Konten


Proses persiapan konten kami adalah sebagai berikut:


gambar


Pernyataan masalah. Ketika tugas berada di tahap formulasi, kadang-kadang teks sudah muncul di sana yang harus masuk ke aplikasi tidak berubah. Jika ya, copywriter dan penulis teknis membantu menyelesaikannya.


Pengembangan tata letak. Ketika perancang menyiapkan tata letak, penulis teknis dan copywriter membacakan semua teks. Dengan demikian, tata letak yang disimpulkan dalam bahasa Inggris termasuk dalam pengembangan. Pengembang tidak harus berpikir tentang teks, ia hanya mengambil garis yang sudah jadi dari tata letak.


Pengembangan. Sayangnya, langkah-langkah sebelumnya tidak dapat mencakup semua jenis teks yang mungkin. Misalnya, tata letak tidak termasuk validator, kesalahan API, beberapa modal windows. Jika selama proses pengembangan itu perlu menambahkan baris, penulis teknis dan copywriter menyediakan semua teks yang diperlukan pengembang.


Dengan demikian, pada suatu titik waktu, kami memiliki keadaan di mana cabang berisi semua teks baru yang diperlukan untuk bagian dari kode yang sedang dikembangkan di dalamnya. Pada titik ini, cabang baru dibuat darinya dengan terjemahan awalan- dan Serge dapat memulai proses penerjemahan. Ketika terjemahan siap, pengembang mengambilnya dari cabang terjemahan, dan kemudian bertindak berdasarkan aliran git yang diterima dalam tim.


Proses ini meminimalkan keterlibatan pengembang dalam proses pelokalan, dan juga meminimalkan jumlah tenaga kerja manual: Anda hanya perlu membuat cabang.


Penjelasan lebih lanjut tentang proses penyetelan sangat bergantung pada fakta bahwa tim memiliki pengaturan dan proses yang serupa.


Penyiapan proyek


Masuk sebagai serge:


 sudo -Hu serge -i 

Buat direktori grup:


 mkdir groups 

Direktori ini akan meng-host proyek yang sesuai dengan repositori di GitLab. Masuk akal untuk mengulangi struktur grup repositori dan lokasinya untuk memudahkan navigasi.


Buat direktori untuk proyek pertama:


 cd groups mkdir myproject cd myproject 

Salin file konfigurasi Serge. Anda dapat menginstal komandan tengah malam dan mengelola file menggunakan manajer file. Sebelum memasang MC, Anda harus keluar dari akun gabung.


 exit sudo apt install mc sudo -Hu serge -i 

File yang akan disalin dari / usr / local / serge / serge-master / bin / tools / fitur-branch-config-generator:


  • File konfigurasi Serge: myproject.cfg
  • file templat pekerjaan: myproject.inc
  • .serge template: myproject.serge.tmpl
  • file untuk menambahkan cabang secara manual: myproject_branches.txt
  • skrip untuk bekerja dengan GitLab: fbcgen.pl

 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/ 

Buat file untuk merekam log plugin:


 mkdir log cd log touch smartcat.log 

Konfigurasikan myproject.inc


  • Di bidang nama, tentukan format file sumber daya yang digunakan dalam proyek.
  • Isi id dengan mask% yourproject%.% Yourformat%.% Yourmasterbranchname%.
  • Di bidang destination_languages, tentukan bahasa yang ingin Anda terjemahkan.
  • Isi sumber dengan topeng ./%proyekAnda%/%AndaMasterbranch%/res/en.
  • Isi output_file_path dengan mask ./%proyek Anda%/%ourmasterbranch%/res/% LANG% /% FILE%.
  • Isi source_match dengan mask.% Yourformat%.
  • Bergantung pada format file sumber daya, tentukan plugin yang diperlukan untuk parsing. Plugin terdaftar dalam dokumentasi server . Isi ts_file_path dengan mask ./po/%proyek Anda%/% LOCALE% /% FILE% .po.
  • Isi master_job dengan mask% yourproject%.% Format% Anda.% Yourmasterbranch%.
    Parameter yang tersisa dibiarkan tidak berubah.

Konfigurasikan myproject.serge.tmpl


  • project_id - id proyek di Smartcat
  • token_id, token - data dari Smartcat
  • remotepath - di sini Anda harus menentukan dengan benar nama parameter dan nilainya {% yourmasterbranch %% ssh_path_to_your_repo% #% yourmasterbranch%}
  • $ FBCGEN_DIR_PADDED -% ssh_path_to_your_repo% # FBCGEN_BRANCH
  • id - job.yourmasterbranch
  • nama - proyek Anda
  • source_language - id
  • destination_languages ​​- bahasa yang perlu diterjemahkan
  • source_dir - ./branches/yourmasterbranch/%path_to_resource_files%
  • source_match - id.% format% Anda
  • db_source - DBI: SQLite: dbname -./% proyek Anda% .db3
  • db_namespace -% yourproject%
  • ts_file_path - ./po/PROJECT_ID_IN_SMARTCAT/% LANG% /% FILE% .po
  • output_file_path - ./branches/%yourmasterbranch%/%path_to_resource_files%/% LOCALE%. % format Anda%
  • output_lang_rewrite {
    zh-hans zh-cn '' zh-hant-tw zh-tw
    } - Parameter ini memungkinkan Anda untuk mendefinisikan kembali penamaan bahasa. Jika penunjukan bahasa dalam proyek tidak cocok dengan penunjukan yang digunakan dalam Smartcat, Anda dapat mendefinisikannya kembali.
  • master_job - pekerjaan.% yourmasterbranch%
  • @inherit -. # jobs /:% yourmasterbranch%
  • source_dir (dalam FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/
  • output_file_path (dalam FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/% LOCALE%. % format Anda%

Penting! Di source_path_prefix, akhir harus menjadi titik% FBCGEN_BRANCH.


Panggilan ke plugin Smartcat harus ditambahkan ke bagian myproject.serge.tmpl yang sesuai


 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 } } 

Deskripsi beberapa parameter:


  • disassemble_algorithm_name Serge.io PO - gunakan hash kunci yang diteruskan ke Serge. Parameter ini diperlukan untuk mengoptimalkan waktu eksekusi dari perintah pull-ts dan push-ts.
  • complete_projects NO - pilih baris dari Smartcat hanya jika semua dokumen dalam proyek selesai. Untuk integrasi kami, proyek di Smartcat identik dengan repositori di GitLab, dan termasuk sekumpulan dokumen. Dokumen adalah produk Cartesian dari jumlah cabang di repositori dan bahasa tempat terjemahan dibuat. Artinya, jika di repositori Anda ada 2 cabang yang perlu diterjemahkan ke dalam 6 bahasa, 12 dokumen akan dibuat dalam proyek.
  • complete_documents YES - pilih baris dari Smartcat jika dokumen dalam status selesai. Ini dilakukan untuk meminimalkan jumlah komit ke repositori.

Contoh Proyek Kustom


Di bawah ini adalah file konfigurasi untuk proyek dengan 6 bahasa. Proyek menyimpan baris sumber dalam format js. Format penamaan file 5 karakter digunakan. Path ke file sumber daya: ./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% } */ } 

Peluncuran aplikasi


Kloning repositori


 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/ 

Siklus lokalisasi


File .serge terbentuk:


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

Mengambil perubahan dari semua cabang repositori:


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

Kumpulan perubahan terjemahan untuk semua cabang dari Smartcat:


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

Pembentukan basis data dan .po:


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

Mengirim data baru dari repositori ke Smartcat:


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

Mengirim transfer yang diterima ke repositori di cabang yang sesuai:


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

Artikel-artikel berikut akan dikhususkan untuk Pemecahan Masalah dan deskripsi kasus integrasi khusus.
Artikel terakhir: 20 proyek, 20 bahasa, batas waktu kemarin. Bagian 3

Source: https://habr.com/ru/post/id446640/


All Articles