لماذا لا يمكنني تشغيل تطبيقي أو موقعي بالكامل من خلال الترجمة من Google والحصول على ترجمة أساسية بلغة أخرى؟
الآن انت تستطيع!
الاسم hokeylization
هو Portmanteau ، ويعني "hokey localization"
إنه أمر مضحك إلى حد ما لأنه بسيط للغاية: فهو يرسل سلاسل إلى خدمة الترجمة من Google
وهو بسيط ولكنه قوي جدًا أيضًا. يحتوي على دعم خاص لمستندات HTML ، مقاود JS قوالب ، و Markdown ملفات.
تستطيع ان تترجم:
- كائن JavaScript يحتوي على رسائل
- أي عدد من الملفات أو الدلائل ، يتم عبور الدلائل دائمًا بشكل متكرر
تمت ترجمة هذا المستند README.md ، باستخدام أداة hokeylization نفسها ، إلى ** كل لغة تدعمها ترجمة Google! **
أنا متأكد من أنها ليست مثالية ، لكني آمل أن تكون أفضل من لا شيء!
[🇸🇦 عربي](lang / ar / README.md) [🇧🇩 بنغالي](lang / bn / README.md) [🇩🇪 الألمانية](lang / de / README.md) [🇺🇸 إنجليزي](lang / en / README.md) [🇪🇸 إسباني](lang / es / README.md) [🇫🇷 فرنسي](lang / fr / README.md) [🇹🇩 الهوسا](lang / ha / README.md) [🇮🇳 هندي](lang / hi / README.md) [🇮🇩 إندونيسي](lang / id / README.md) [🇮🇹 إيطالي](lang / it / README.md) [🇯🇵 باليابانية](lang / ja / README.md) [🇰🇷 كوري](lang / ko / README.md) [🇮🇳 مارانثي](lang / السيد / README.md) [🇵🇱 البولندية](lang / pl / README.md) [🇧🇷 برتغالي](lang / pt / README.md) [🇷🇺 الروسية](lang / ru / README.md) [🇰🇪 السواحيلية](lang / sw / README.md) [🇵🇭 تاجالوج](lang / tl / README.md) [🇹🇷 التركية](lang / tr / README.md) [🇵🇰 الأردية](lang / ur / README.md) [🇻🇳 فيتنامي](lang / vi / README.md) [🇨🇳 الصينية](lang / zh / README.md)
هذه الترجمة المحددة لـ [README] الأصلي (https://github.com/cobbzilla/hokeylization/blob/master/README.md) قد يكون معيبًا - * نرحب بالتصحيحات! * يُرجى إرسال طلب سحب على GitHub ، أو إذا لم تكن مرتاحًا لفعل ذلك ، افتح مشكلة
عند إنشاء مشكلة GitHub جديدة حول الترجمة ، يرجى القيام بما يلي:
- تضمين عنوان URL للصفحة (نسخ / لصق من شريط عنوان المتصفح)
- تضمين النص الخاطئ بالضبط (نسخ / لصق من المتصفح)
- يرجى وصف ما هو الخطأ - هل الترجمة غير صحيحة؟ هل التنسيق معطل بطريقة ما؟
- يرجى تقديم اقتراح بترجمة أفضل ، أو كيفية تنسيق النص بشكل صحيح
- شكرًا لك!
- [المصدر](# المصدر)
- [الدعم والتمويل](# دعم وتمويل)
- [التثبيت](# التثبيت)
- [إعداد](# إعداد)
- [Translating a JavaScript string Resource file](# Translating-a-JavaScript-string-Resource-file)
- [ترجمة دليل ملفات نصية](# Translating-a-directory-of-text-files)
- [خيارات أخرى](# خيارات أخرى)
- [أوامر دفعية JSON](أوامر دفعة JSON #)
أحاول أن أكون مطور برامج محترف مفتوح المصدر. لقد كنت أعمل في صناعة البرمجيات لسنوات عديدة ، لقد بدأت شركات ناجحة وقمت ببيعها لشركات عامة. لقد فقدت وظيفتي مؤخرًا ، وليس لدي حقًا أي عمل آخر مرتب
لذلك سأحاول كتابة برنامج مفيد ومعرفة ما إذا كان ذلك يعمل
إذا كنت تستمتع باستخدام هذا البرنامج ، فسأكون سعيدًا جدًا لتلقي حتى ملفات أصغر مساهمة شهرية عبر Patreon
شكرًا لك!
لاستخدام أداة سطر الأوامر ، قم بالتثبيت باستخدام npm
yarn
:
npm install -g hokeylization
yarn global add hokeylization
لاستخدامها كمكتبة ، قم بتثبيت الإصدار lite
، وهو أصغر بكثير:
npm install -g hokeylization-lite
yarn global add hokeylization-lite
ثم انظر إلى التعليمات الخاصة hokey
:
hokey --help
hokey -h
هل تريد رؤية الإخراج بلغتك أو بلغة أخرى؟
يحاول hokey
اكتشاف اللغة تلقائيًا من متغيرات بيئة قوقعتك
يمكنك فرض لغة عن طريق تعيين متغير البيئة LC_ALL
:
LC_ALL=it hokey --help
لاحظ أنه إذا قمت بتثبيت hokeylization-lite
، فإن تعليمات الأمر تكون متاحة فقط باللغة الإنجليزية
قم بتعيين متغير البيئة GOOGLE_TRANSLATE_PROJECT_ID
لتحديد مشروع ترجمة Google الخاص بك
عيّن متغير البيئة GOOGLE_APPLICATION_CREDENTIALS
على بيانات اعتماد JSON التي نزّلتها
بعد معرفة كيفية عمل المصادقة على Google cloud (يمكن أن يكون ذلك ممتعًا)
إذا كنت تعمل من التعليمات البرمجية المصدر ، فيمكنك أيضًا وضعها في ملف .env
في المصدر
الدليل الذي سيتم تحميله في وقت التشغيل عبر dotenv
يجب أن يكون جدول السلسلة ** الخاص بك ** في ملف JavaScript بأحد هذين الشكلين:
تصدير ES6:
export default {
string_key: "some value",
another_key: "another value",
... more keys ...
}
تصدير CommonJS
module.exports = {
string_key: "some value",
another_key: "another value",
... more keys ...
}
إذا كان هذا الملف يسمى myfile.en.js
، فيمكنك ترجمته إلى الإسبانية والألمانية باستخدام:
hokey -l es,de -o myfile.LANG.js myfile.en.js
إن LANG
الواردة أعلاه خاصة - إنها كلمة محجوزة في هذه الأداة!
يتم استبدال LANG
برمز اللغة لملفات الإخراج
وهكذا يقوم الأمر أعلاه بإنشاء الملفات:
myfile.es.js
myfile.de.js
-l
/ --languages
هو قائمة رموز لغة ISO مفصولة بفواصل
مدعوم من Google Translate
إذا كان ملف الإخراج موجودًا بالفعل ، فسيتم فحصه لتحديد المفاتيح الموجودة بالفعل. لن تتم ترجمة المفاتيح الموجودة. سيتم إنشاء وإلحاق ترجمات المفاتيح المفقودة إلى نهاية كائن JS. تتم إعادة كتابة الملف بأكمله دائمًا.
لفرض إعادة ترجمة جميع المفاتيح ، استخدم الخيار -f
/ --force
يمكنك أيضًا ترجمة دليل الملفات. hokeylization سوف تزور بشكل متكرر كل ملف في الدليل وتشغيل محتوياته من خلال ترجمة جوجل ، وحفظ الإخراج إلى ملف مُسمى بشكل مماثل في شجرة دليل منفصلة
عندما يكون هدف ترجمتك هو دليل ، يتم تمكين هذا الوضع
يحدد الخيار -o
/ --outfile
دليل الإخراج
** تحذير كبير **: عند ترجمة الدلائل ، ** لا ** حدد دليل إخراج هذا ضمن دليل الإدخال الخاص بك! إذا قمت بذلك ، فسوف:
- تحريض العودية اللانهائية
- تشغيل فاتورة Google الخاصة بك
- املأ القرص الخاص بك
- أقل متعة
فيما يلي مثال لما * لا يجب فعله *:
hokey -l es -o templates/es templates # <--- DON'T DO THIS!
عند تشغيل ذلك ، تتم كتابة الملفات المترجمة إلى templates/es
، وبالتالي تصبح جديدة
ملفات المصدر المراد ترجمتها ، نظرًا لأنها موجودة ضمن templates/
- تستمر هذه العملية
إلى الأبد ، لا تفعل ذلك!
حسنًا ، لنفترض أن لديك بعض قوالب البريد الإلكتروني في دليل:
templates/email/en/welcome.txt
templates/email/en/welcome.html
templates/email/en/verify-account.txt
templates/email/en/verify-account.html
templates/email/en/reset-password.txt
templates/email/en/reset-password.html
لترجمة كل ذلك إلى الإسبانية والألمانية ، قم بتشغيل:
hokey -l es,de -o templates/email/LANG templates/email/en
في ما سبق ، LANG
كلمة محجوزة وسيتم استبدالها برمز لغة ISO
ماذا يحدث عندما يتم تشغيل ما سبق:
- سيتم إنشاء مجلدات "القوالب / البريد
templates/email/es
" وtemplates/email/de
" (إذا لم تكن موجودة) - سيتم ترجمة كل ملف في
templates/email/en
" إلى الإسبانية والألمانية - لن يتم إعادة إنشاء ملفات الإخراج الموجودة إلا إذا استخدمت
-f
/--force
- ستنتهي ببنية دليل وملفات متطابقة داخل
es
de
كما هو الحال لديك ضمنen
قم بتمرير -n
/ --dry-run
لعرض ما يمكن فعله ، ولكن لا تقم فعليًا بإجراء أي استدعاءات لواجهة برمجة التطبيقات أو كتابة أي ملفات
مرر -f
" / --force
دائمًا ، حتى لو كانت موجودة بالفعل
قم بتمرير -m
/ --match
للحد من الملفات التي تتم معالجتها عند التشغيل في وضع الدليل
قد لا ترغب دائمًا في ترجمة * كل * ملف في دليل المصدر إلى الدليل الهدف
قيمة الخيار -m
/ --match
هي عبارة عن regex (احذر من قواعد اقتباس الصدفة!) التي تحدد
ما هي الملفات التي يجب ترجمتها
في حالة الشك ، يمكنك دمج هذا الخيار مع -n
/ --dry-run
لمعرفة الملفات التي سيتم ترجمتها
أحيانًا يتطابق -m
مع عدد كبير جدًا من الملفات. استخدم الخيار -e
" / --excludes
صراحةً
الملفات التي لولا ذلك لتتطابق
يمكنك سرد العديد من regexes ، مفصولة بمسافات
قد يكون الاستخدام الشائع: --excludes node_modules dist \.git build tmp
قد تحتوي السلاسل المراد ترجمتها على قوالب {{ handlebars }}
، إما باستخدام اثنين أو ثلاثة من الأقواس المتعرجة
ربما تريد * DON'T * أن تتم ترجمة العناصر الموجودة داخل تلك القوالب
مرر علامة -H
" / --handlebars
{{ ... }}
Markdown ليس نصًا ولا html ، لذلك تواجه ترجمة Google بعض الصعوبات في استخدامه
تتيح العلامة -M
/ --markdown
معالجة خاصة لملفات markdown
مع ملفات markdown ، إذا لم تستخدم علامة -M
، فستجد على الأرجح هذه المشكلات:
- كسر الروابط. في الترجمة ، يظهر حرف مسافة بعد انتهاء وصف ارتباط علامة التبويب (بعلامة
]
) ولكن قبل أن يبدأ ارتباط الهدف الخاص به (بـ(
). يؤدي هذا إلى عرض علامة التخفيض بشكل غير صحيح ، والارتباط معطل عند عرض المستند. - يتم ترجمة كتل التعليمات البرمجية. لا تعرف خدمة Google Translate ما الذي يعتبره تخفيض السعر في الكود وما لا يعرفه
- تباعد غير صحيح لكتل التعليمات البرمجية ذات المسافات البادئة. يصعب الحفاظ على المسافات في الترجمة
- ستتم ترجمة الأشياء الموجودة داخل
backticks
، عندما تريد دائمًا أن تكون قيمًا حرفية
عند تمكين علامة "-M" / --markdown
-M
- النمط
](
سيتم تكثيفه إلى](
وبالتالي إصلاح روابط تخفيض السعر المعطلة - سيتم وضع غلاف "بدون ترجمة" حول كتل التعليمات البرمجية ذات المسافة البادئة ، مع الحفاظ على المسافة البادئة المناسبة والتأكد من عدم ترجمتها
- سيتم وضع غلاف "بدون ترجمة" حول النص داخل
backticks
لضمان عدم ترجمتها
عادة تتم معالجة كل شيء كنص عادي
إذا كان المحتوى الخاص بك بتنسيق HTML ، فسيتم تشويهه ما لم تمرر الخيار -p html
/ --process-as html
للمغامرين: عند معالجة الملفات في دليل ، يمكنك تمرير الخيار -F
/ --filter
لتصفية الإخراج قبل كتابته في نظام الملفات
يجب أن تكون قيمة هذا الخيار عبارة عن مسار إلى ملف JS يقوم بتصدير وظيفة تسمى filter
يجب أن تكون وظيفة async
filter
await
سيتم استدعاء "انتظار" عليها
قبل كتابة الملفات على القرص ، سيتم تمرير محتويات الملف بالكامل إلى وظيفة filter
كسلسلة
القيمة filter
هي ما سيتم كتابته بالفعل إلى التخزين
وبالتالي ، لديك سيطرة كاملة على ما سيتم كتابته في النهاية
سيتم البحث عن البرنامج النصي filter
عامل التصفية" في المواقع التالية (مع .js
إلى عامل التصفية
الاسم ، ما لم يكن ينتهي بالفعل .js
)
- الدليل الحالي
- دليل باسم
.hokey-filters
داخل الدليل الحالي - دليل باسم
${HOME}/.hokey-filters
، حيث يكون - [دليل الفلاتر] المدمج (https://github.com/cobbzilla/hokeylization/tree/master/util/filter)
يمكن أن تتكون سلسلة filter
من عدة كلمات. في هذه الحالة ، تكون الكلمة الأولى هي اسم المرشح ، و
سيتم تمرير الكلمات المتبقية filter
استخدم -h
" / --help
لإظهار المساعدة
باستخدام الخيار -j
/ --json
، يمكنك تشغيل عدة أوامر hokey
يُطلق على هذا الملف اسم hokey.json
، ولكن يمكنك تسميته كما تريد
إذا قمت بتمرير دليل على أنه الخيار "-j" ، hokey
عن hokey.json
-j
هذا الدليل
يجب أن يحتوي ملف JSON على كائن واحد. داخل هذا الكائن ، تكون أسماء خصائصه هي نفسها
خيارات سطر الأوامر ، بالإضافة إلى خاصية إضافية واحدة تسمى hokey
خاصية hokey
هي مجموعة من الأوامر لتشغيلها. سيتم الإعلان عن الخصائص ضمن هذه الأوامر
تجاوز أي تصريحات مكررة في الكائن الخارجي.
داخل كل كائن في المصفوفة hokey
، يجب تحديد name
الإدخال والإخراج
فيما يلي مثال على hokey.json
{
"inputLanguage": "en",
"languages": "es,fr,ja", # can also be an array of strings
"force": false,
"match": null,
"processAs": null,
"excludes": ["exclude-1", "exclude-2"],
"handlebars": false,
"markdown": false,
"regular": false,
"dryRun": false,
"filter": "theFilter.js",
"hokey": [
{
"name": "locale names",
"infile": "messages/locales_en.js",
"outfile": "messages/locales_LANG.js",
"handlebars": true
},
{
"name": "CLI messages",
"infile": "messages/en_messages.js",
"outfile": "messages/LANG_messages.js",
"handlebars": true
},
{
"name": "README",
"infile": "README.md",
"outfile": "lang/LANG/",
"excludes": ["lang/", "node_modules/", "\\.git/", "tmp/"],
"filter": "relativizeMarkdownLinks lang",
"markdown": true,
"index": "lang/README.md"
}
]
}
قم بتمرير مصفوفة من مسارات الملفات كـ infiles
بدلاً من مسار واحد infile
، كما في هذا المثال:
{
... [
{
"name": "my docs",
"infiles": ["README.md", "INSTALL.md", "TUTORIAL.md"],
"outfile": "docs/LANG/",
"markdown": true
]
}
عند الترجمة إلى العديد من اللغات ، يمكن hokey
إنشاء ملف فهرس يسرد جميع الترجمات التي تمت
ويوفر روابط لهم
- عند إنشاء الفهارس ، يمكن أن يكون لديك مصدر إدخال واحد فقط *
مرر الخيار -I
" / --index
، القيمة هي المكان الذي سيتم إنشاء ملف الفهرس فيه ، والذي يمكن أن يكون ملفًا
أو دليل. إذا كان دليلًا ، فسيتم استخدام اسم ملف افتراضي ، بناءً على القالب (انظر أدناه)
استخدم -A
/ --index-template
لتحديد كيفية تنسيق ناتج الفهرس. يمكنك تحديد "html" ،
"markdown" أو "text" أو مسار الملف إلى نموذجك HandlebarsJS
إذا حددت قالبك الخاص ، يجب عليك أيضًا تحديد ملف (وليس دليل) لـ -I
/ --index
اختيار