20 مشروعًا ، 20 لغة ، الموعد النهائي أمس. الجزء 2

استمرار سلسلة من المقالات حول إعداد تعريب مستمر. يمكنك العثور على الأول هنا . في هذه المقالة ، سأخبرك بكيفية دمج حزمة Serge-Smartcat-GitLab وتكوين ملفات تكوين Serge باستخدام مشروع اختبار مثال. تعليمات لأوبونتو.


التثبيت عبر vagrantfile


إذا لم يكن لديك خادم مع أوبونتو في متناول اليد ، يمكنك استخدام Vagrant. كيف يعمل:


  1. تثبيت Vagrant و VirtualBox باتباع الإرشادات .
  2. قم بتنزيل البرنامج النصي vagrantfile and bash.
  3. إطلاق vagrantfile باتباع التعليمات .

نتيجة Vagrant build هي آلة افتراضية مع Ubuntu ، حيث تم تثبيت Serge مع البرنامج المساعد Smartcat. سيتم نسخ جميع الملفات اللازمة ، يتم إنشاء مفتاح سه. يمكنك المتابعة فورًا إلى إعداد المشروع وتشغيل التطبيق.


التثبيت اليدوي


إنشاء المستخدم


إنشاء مجموعة مستخدم serge:


sudo groupadd serge 

قم بإنشاء مستخدم serge باستخدام الدليل الرئيسي / usr / local / serge:


 sudo useradd -g serge serge -m -d /usr/local/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 باستخدام المفتاح ssh الذي سيستخدمه مستخدم serge في GitLab:


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

التكامل مع GitLab


إنشاء مستخدم سيرج في GitLab وإضافته إلى جميع مستودعات المطور.
انسخ المفتاح ssh من ملف id_rsa_serge.pub إلى إعدادات ملف تعريف المستخدم serge في GitLab. يعد ذلك ضروريًا حتى يتمكن سيرج من تلقي وإرسال السلاسل في GitLab.


اكتمال التثبيت!


تكامل Smartcat


للبدء ، يجب عليك:


  1. الاشتراك في Smartcat .
  2. قم بإنشاء مشروع من خلال الإشارة إلى اللغات التي تنوي ترجمتها إليها. عند إعداد المكوّن الإضافي ، ستحتاج إلى رموز اللغة التي تستخدمها Smartcat.
  3. الحصول على project_id ، الرمز المميز و token_id .
  4. الكتابة إلى support@smartcat.ai واطلب تمكين الدعم لخوارزمية تحليل ملف Serge

تكوين سيرج Smartcat


قبل المتابعة إلى الإعداد ، سوف أصف المبدأ العام للعملية. تتضمن دورة التوطين القياسية 5 خطوات:
صورة


  • سحب - الحصول على خطوط جديدة من مستودع.
  • السحب - احصل على سلاسل مترجمة من Smartcat (تم تمكين مكون Smartcat الإضافي).
  • الترجمة - يتم تحليل جميع تنسيقات المصدر من المستودع وتحويلها إلى ملفات .po ، تتم كتابة الترجمات المستلمة إلى ملفات .po. تتم كتابة جميع الأسطر إلى قاعدة بيانات ذاكرة الترجمة Serge.
  • push-ts - يتم إرسال خطوط جديدة مستلمة في الخطوة الأولى إلى Smartcat (باستخدام المكون الإضافي Smartcat).
  • يتم الضغط على سلاسل المترجمة في GitLab.
    يمكنك استخدام التكامل مع نظام CAT آخر ، على سبيل المثال ، هناك مكون إضافي لبرنامج Pootle .

مستودعات Serge و git


كيف يعرف سيرج أي خطوط لإرسالها للترجمة؟ لتحديد خطوط جديدة ، يتم استخدام أدوات git القياسية: يتم أخذ الفرق بين الفرع الرئيسي والفرع الحالي. يتم إرسال Diff للترجمة.


صورة


هام : كقاعدة عامة ، يتم حماية الفرع الرئيسي ، وبالتالي يتم استخدام فرع ترجمة إضافي لتحديد الاختلافات ، ونطلق عليه "الترجمة الأساسية". وهذا هو ، بعد دمج الإصدار في ماجستير ، يجب أن يكون سيد عقدت بالإضافة إلى ذلك في ترجمة قاعدة.


هناك نقطة مهمة هنا. من الضروري بناء العمليات بطريقة تجعل المطورين ، من ناحية ، يفهمون ماذا وفي أي لحظة سيذهبون إلى الترجمة ، ومن ناحية أخرى ، بحيث لا يعمل techpec في دوائر ، ممسكًا برأسه ، لأن فرقه هو 1000 سطر. ويبدو أنه تم تصحيح العنوان فقط.


مبدأ العمل


يدخل Serge إلى المستودع ، ويأخذ جميع الفروع ، ويبدأ بمقارنتها بالفرع الرئيسي. لكل فرع يتم اكتشاف الفرق فيه ، فإنه ينشئ مجموعة من مستندات الترجمة في مشروع Smartcat. لكي لا تتورط في فوضى الفروع غير الملائمة وألا تقف بالقرب من كل مطور بسؤال: "هل تذكر حذف الفرع؟" ، فمن المناسب استخدام البادئات. على سبيل المثال ، يعمل Serge فقط مع الفروع التي لها بادئة الترجمة .


من المهم أيضًا أن تندرج النصوص المقروءة والمعتمدة بالفعل والتي أصبحت جاهزة للترجمة في الفرع مع ترجمة البادئة. بعد كل شيء ، لا أحد يريد تحليل تاريخ الإرتكارات دون جدوى لفهم أي نوع من النصوص هم ولماذا يبدو الفرق مثل هذا؟


إعداد المحتوى


عملية إعداد المحتوى لدينا هي كما يلي:


صورة


بيان المشكلة. عندما تكون المهمة في مرحلة الصياغة ، تظهر النصوص في بعض الأحيان بالفعل والتي يجب أن تذهب إلى التطبيق دون تغيير. إذا كان الأمر كذلك ، فإن مؤلف الإعلانات والكاتب الفني يساعدان في وضع اللمسات الأخيرة عليها.


تطوير التصاميم. عندما أعد المصمم المخططات ، قرأ الكاتب التقني وكاتب النصوص جميع النصوص. وبالتالي ، فإن المخططات المستخلصة في اللغة الإنجليزية تقع في التطور. لا يتعين على المطور التفكير في النصوص ؛ إنه ببساطة يأخذ خطوطًا جاهزة من المخططات.


التنمية. لسوء الحظ ، لا يمكن أن تغطي الخطوات السابقة جميع أنواع النصوص الممكنة. على سبيل المثال ، لا تتضمن التخطيطات أدوات التحقق ، أخطاء واجهة برمجة التطبيقات ، بعض الإطارات المشروطة. إذا كان من الضروري أثناء عملية التطوير إضافة خطوط ، فإن الكاتب التقني ومؤلف الإعلانات يزودان المطور بجميع النصوص اللازمة.


وبالتالي ، في وقت ما ، لدينا حالة حيث يحتوي الفرع على جميع النصوص الجديدة اللازمة لجزء من الكود الذي يتم تطويره فيه. في هذه المرحلة ، يتم إنشاء فرع جديد منه مع ترجمة البادئة - ويمكن أن يبدأ سيرج عملية الترجمة. عندما تكون الترجمات جاهزة ، يأخذها المطور من فرع الترجمة ، ثم يتصرف بناءً على تدفق البوابة المقبول في الفريق.


تقلل هذه العملية من مشاركة المطور في عملية التعريب ، وتقلل أيضًا من حجم العمل اليدوي: تحتاج فقط إلى إنشاء فرع.


يعتمد الوصف الإضافي لعملية التوليف اعتمادًا كبيرًا على حقيقة أن الفريق لديه ترتيبات وعمليات مماثلة.


إعداد المشروع


تسجيل الدخول باسم سيرج:


 sudo -Hu serge -i 

قم بإنشاء دليل المجموعات:


 mkdir groups 

سيستضيف هذا الدليل المشروعات المقابلة لمستودعات التخزين في GitLab. من المنطقي تكرار بنية مجموعات المستودعات ومواقعها لتسهيل التنقل.


إنشاء دليل للمشروع الأول:


 cd groups mkdir myproject cd myproject 

نسخ ملفات التكوين سيرج. يمكنك تثبيت قائد منتصف الليل وإدارة الملفات باستخدام مدير الملفات. قبل تثبيت MC ، يجب عليك تسجيل الخروج من حساب سيرج الخاص بك.


 exit sudo apt install mc sudo -Hu serge -i 

الملفات المراد نسخها من / usr / local / serge / serge-master / bin / tools / feature-branch-config-generator:


  • ملف التكوين سيرج: myproject.cfg
  • ملف قالب المهمة: myproject.inc
  • .serge template: myproject.serge.tmpl
  • ملف لإضافة الفروع يدويًا: myproject_branches.txt
  • النصي للعمل مع 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/ 

إنشاء ملف لتسجيل سجلات البرنامج المساعد:


 mkdir log cd log touch smartcat.log 

تكوين myproject.inc


  • في حقل الاسم ، حدد تنسيق ملف المورد المستخدم في المشروع.
  • املأ المعرف بالقناع٪ yourproject٪.٪ Yourformat٪.٪ Yourmasterbranchname٪.
  • في مجال destination_languages ​​، حدد اللغات التي تريد الترجمة إليها.
  • املأ المصدر بالقناع. /٪yourproject٪/٪yourmasterbranch٪/res/ar.
  • املأ output_file_path باستخدام القناع. /٪yourproject٪/٪yourmasterbranch٪/res/٪ LANG٪ /٪ FILE٪.
  • املأ source_match بالقناع.٪ Yourformat٪.
  • اعتمادًا على تنسيق ملفات الموارد ، حدد المكون الإضافي المطلوب للتحليل. الإضافات مدرجة في وثائق سيرج . املأ ts_file_path باستخدام قناع ./po/٪yourproject٪/٪ LOCALE٪ /٪ FILE٪ .po.
  • املأ master_job باستخدام قناع٪ yourproject٪.٪ Yourformat٪.٪ Yourmasterbranch٪.
    يتم ترك المعلمات المتبقية دون تغيير.

تكوين myproject.serge.tmpl


  • project_id - معرف المشروع في Smartcat
  • token_id ، الرمز المميز - البيانات من Smartcat
  • remotepath - هنا يجب عليك تحديد اسم المعلمة وقيمته {٪ yourmasterbranch ٪٪ ssh_path_to_your_repo٪ #٪ yourmasterbranch٪} بشكل صحيح
  • $ FBCGEN_DIR_PADDED -٪ ssh_path_to_your_repo٪ # FBCGEN_BRANCH
  • id - job.yourmasterbranch
  • اسم - مشروعك
  • source_language - en
  • destination_languages ​​- اللغات التي يلزم الترجمة إليها
  • source_dir - ./branches/yourmasterbranch/٪path_to_resource_files٪
  • source_match - en.٪ yourformat٪
  • db_source - DBI: SQLite: dbname -./٪ yourproject٪ .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٪. ٪ yourformat٪
  • output_lang_rewrite {
    zh-hans zh-cn '' zh-hant-tw zh-tw
    } - تسمح لك هذه المعلمة بإعادة تعريف تسميات اللغة. إذا كانت تسميات اللغة في المشروع لا تتطابق مع التسميات المستخدمة في Smartcat ، فيمكنك إعادة تعريفها.
  • master_job - الوظيفة.٪ yourmasterbranch٪
  • inherit -. # jobs /:٪ yourmasterbranch٪
  • source_dir (في FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/٪path_to_resource_files٪/
  • output_file_path (في FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/٪path_to_resource_files٪/٪ LOCALE٪. ٪ yourformat٪

! المهم في source_path_prefix ، يجب أن تكون النهاية هي النقطة٪ 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 } } 

وصف بعض المعلمات:


  • disassemble_algorithm_name Serge.io PO - استخدم تجزئة المفتاح التي تم تمريرها إلى Serge. هذه المعلمة ضرورية لتحسين وقت تنفيذ أوامر السحب وأوامر الدفع.
  • Complete_projects NO - اختر خطوطًا من Smartcat فقط إذا تم إكمال جميع المستندات في المشروع. لتكاملنا ، المشروع في Smartcat مرادف لمستودع التخزين في GitLab ، ويتضمن مجموعة من الوثائق. الوثيقة هي نتاج ديكارت لعدد الفروع في المستودع واللغات التي تمت بها الترجمة. أي إذا كان في مستودعك فرعين يلزم ترجمتهما إلى 6 لغات ، سيتم إنشاء 12 وثيقة في المشروع.
  • Complete_documents YES - اختر خطوطًا من Smartcat إذا كانت الوثيقة في حالة الانتهاء. يتم ذلك لتقليل عدد مرات الالتزام بالمستودع.

مثال مشروع مخصص


فيما يلي ملفات التكوين لمشروع مع 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 

تشكيل قاعدة البيانات و. ppo:


 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

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


All Articles