میں اپنی پوری ایپ یا سائٹ کو گوگل ٹرانسلیٹ کے ذریعے کیوں نہیں چلا سکتا اور کسی دوسری زبان میں بنیادی ترجمہ حاصل کر سکتا ہوں؟
اب آپ کر سکتے ہیں!
نام hokeylization
' ایک پورٹ مینٹیو ہے، جس کا مطلب ہے 'ہوکی لوکلائزیشن'
یہ کچھ حد تک ہوکی ہے کیونکہ یہ بہت آسان ہے: یہ گوگل ٹرانسلیٹ کو تار بھیجتا ہے۔
اور یہ آسان ہے، پھر بھی بہت طاقتور ہے۔ اسے HTML دستاویزات کے لیے خصوصی تعاون حاصل ہے، HandlebarsJS ٹیمپلیٹس، اور Markdown فائلیں۔
آپ ترجمہ کر سکتے ہیں:
- پیغامات پر مشتمل ایک جاوا اسکرپٹ آبجیکٹ
- کسی بھی تعداد میں فائلیں یا ڈائریکٹریز، ہمیشہ ڈائرکٹریوں کو بار بار منتقل کرتے ہیں۔
اس README.md دستاویز کا ترجمہ ہوکیلائزیشن ٹول کا استعمال کرتے ہوئے کیا گیا ہے۔ گوگل ٹرانسلیٹ کے ذریعے تعاون یافتہ ہر زبان!
مجھے یقین ہے کہ یہ کامل نہیں ہے، لیکن مجھے امید ہے کہ یہ کچھ بھی نہیں سے بہتر ہے!
🇸🇦 عربی 🇧🇩 بنگالی 🇩🇪 جرمن 🇺🇸 انگریزی 🇪🇸 ہسپانوی 🇫🇷 فرانسیسی 🇹🇩 ہاؤسا 🇮🇳 ہندی 🇮🇩 انڈونیشیائی 🇮🇹 اطالوی 🇯🇵 جاپانی 🇰🇷 کورین 🇮🇳 مرانتھی 🇵🇱 پولش 🇧🇷 پرتگالی 🇷🇺 روسی 🇰🇪 سواحلی 🇵🇭 Tagalog 🇹🇷 ترکی 🇵🇰 اردو 🇻🇳 ویتنامی 🇨🇳 چینی
اصل کا یہ خاص ترجمہ README خامی ہو سکتی ہے -- تصحیح بہت خوش آئند ہے! براہ کرم GitHub پر پل کی درخواست بھیجیں، یا اگر آپ ایسا کرنے میں آرام سے نہیں ہیں تو، ایک مسئلہ کھولیں
جب آپ ترجمہ کے بارے میں ایک نیا GitHub مسئلہ بناتے ہیں، تو براہ کرم یہ کریں:
- صفحہ کا یو آر ایل شامل کریں (براؤزر ایڈریس بار سے کاپی/پیسٹ کریں)
- درست متن شامل کریں جو غلط ہے (براؤزر سے کاپی/پیسٹ) *براہ کرم بیان کریں کہ کیا غلط ہے -- کیا ترجمہ غلط ہے؟ کیا فارمیٹنگ کسی طرح ٹوٹ گئی ہے؟
- براہِ کرم ایک بہتر ترجمے کی تجویز پیش کریں، یا متن کو کس طرح مناسب طریقے سے فارمیٹ کیا جائے۔ *** آپ کا شکریہ!**
- ماخذ
- [سپورٹ اور فنڈنگ](#سپورٹ اور فنڈنگ)
- [انسٹالیشن](# انسٹالیشن)
- [سیٹ اپ](# سیٹ اپ)
- جاوا اسکرپٹ اسٹرنگ ریسورس فائل کا ترجمہ کرنا
- ٹیکسٹ فائلوں کی ڈائرکٹری کا ترجمہ
- [دیگر اختیارات](#دیگر اختیارات)
- JSON بیچ کمانڈز
میں ایک پیشہ ور اوپن سورس سافٹ ویئر ڈویلپر بننے کی کوشش کر رہا ہوں۔ میں کام کرتا رہا ہوں۔ سافٹ ویئر انڈسٹری میں کئی سالوں سے، میں نے کامیاب کمپنیاں شروع کی ہیں اور انہیں پبلک کمپنیوں کو فروخت کیا ہے۔ حال ہی میں میں نے اپنا کام کھو دیا، اور میرے پاس واقعی کوئی اور کام نہیں ہے۔
تو میں مددگار سافٹ ویئر لکھنے کی کوشش کروں گا اور دیکھوں گا کہ آیا یہ کام کرتا ہے۔
اگر آپ اس سافٹ ویئر کو استعمال کرنے سے لطف اندوز ہوتے ہیں، تو مجھے یہ بھی حاصل کرنے میں بہت خوشی ہوگی۔ سب سے چھوٹا پیٹریون کے ذریعے ماہانہ تعاون
شکریہ!
کمانڈ لائن ٹول استعمال کرنے کے لیے، 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 پروجیکٹ کی شناخت کے لیے GOOGLE_TRANSLATE_PROJECT_ID
ماحولیاتی متغیر سیٹ کریں
GOOGLE_APPLICATION_CREDENTIALS
ماحولیاتی متغیر کو اپنے ڈاؤن لوڈ کردہ JSON اسناد پر سیٹ کریں
یہ معلوم کرنے کے بعد کہ گوگل کلاؤڈ پر توثیق کیسے کام کرتی ہے (یہ تفریحی ہوسکتا ہے)
اگر آپ سورس کوڈ سے چل رہے ہیں، تو آپ اسے سورس میں .env
فائل میں بھی رکھ سکتے ہیں
ڈائریکٹری وہ dotenv کے ذریعے رن ٹائم پر لوڈ کی جائے گی۔
آپ کا سٹرنگ ٹیبل لازمی طور پر جاوا اسکرپٹ فائل میں ان دو شکلوں میں سے کسی ایک میں ہونا چاہیے:
ES6 برآمد:
export default {
string_key: "some value",
another_key: "another value",
... more keys ...
}
کامن جے ایس ایکسپورٹ
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
اختیار آئی ایس او لینگویج کوڈز کی کوما سے الگ کردہ فہرست ہے۔
Google Translate کے ذریعے تعاون یافتہ
اگر آؤٹ پٹ فائل پہلے سے موجود ہے، تو اس کا تعین کرنے کے لیے جانچ کی جائے گی کہ کون سی کلید پہلے سے موجود ہے۔ موجودہ کلیدوں کا ترجمہ نہیں کیا جائے گا۔ گمشدہ کلیدوں کے ترجمے بنائے جائیں گے اور شامل کیے جائیں گے۔ جے ایس آبجیکٹ کے آخر تک۔ پوری فائل ہمیشہ دوبارہ لکھی جاتی ہے۔
تمام کلیدوں کو زبردستی دوبارہ ترجمہ کرنے کے لیے، -f
/ --force
اختیار استعمال کریں۔
آپ فائلوں کی ڈائرکٹری کا ترجمہ بھی کر سکتے ہیں۔ hokeylization بار بار ہر ایک کا دورہ کرے گا ڈائریکٹری میں فائل کریں اور گوگل ٹرانسلیٹ کے ذریعے اس کے مواد کو چلائیں، اور آؤٹ پٹ کو محفوظ کریں۔ ایک علیحدہ ڈائریکٹری ٹری میں ایک جیسی نام کی فائل میں
جب آپ کے ترجمے کا ہدف ایک ڈائرکٹری ہے، تو یہ موڈ فعال ہو جاتا ہے۔
-o
/ --outfile
اختیار آؤٹ پٹ ڈائرکٹری کی وضاحت کرتا ہے۔
بڑی وارننگ: ڈائریکٹریز کا ترجمہ کرتے وقت، نہ کریں آؤٹ پٹ ڈائرکٹری کی وضاحت کریں جو آپ کی ان پٹ ڈائرکٹری میں ہے! اگر آپ ایسا کرتے ہیں، تو آپ کریں گے:
- لامحدود تکرار دلانا
- اپنا گوگل بل چلائیں۔
- اپنی ڈسک کو بھریں۔
- کم مزہ کریں۔
کیا نہیں کرنا کی ایک مثال یہ ہے:
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
پاس کریں، لیکن اصل میں کوئی API کال نہ کریں یا کوئی فائل نہ لکھیں۔
ترجمہ کو ہمیشہ دوبارہ تخلیق کرنے کے لیے -f
/ --force
پاس کریں، چاہے وہ پہلے سے موجود ہوں۔
ڈائریکٹری موڈ میں چلتے وقت پروسیس شدہ فائلوں کو محدود کرنے کے لیے -m
/ --match
کو پاس کریں۔
ہو سکتا ہے کہ آپ ہمیشہ اپنی سورس ڈائرکٹری میں موجود ہر فائل کو اپنی ٹارگٹ ڈائرکٹری میں ترجمہ نہیں کرنا چاہتے
-m
/ --match
اختیار کی قدر ایک regex ہے (شیل کوٹ کرنے کے قوانین سے ہوشیار رہیں!)
کن فائلوں کا ترجمہ کیا جانا چاہئے۔
شک ہونے پر، آپ اس اختیار کو -n
/ --dry-run
کے ساتھ جوڑ کر دیکھ سکتے ہیں کہ کن فائلوں کا ترجمہ کیا جائے گا۔
کبھی کبھی آپ کا -m
بہت زیادہ فائلوں سے میل کھاتا ہے۔ واضح طور پر خارج کرنے کے لیے -e
/ --excludes
اختیار استعمال کریں۔
فائلیں جو دوسری صورت میں مماثل ہوتیں۔
آپ خالی جگہوں سے الگ کرکے متعدد ریجیکس کی فہرست بنا سکتے ہیں۔
ایک عام استعمال یہ ہوگا: --excludes node_modules dist \.git build tmp
ترجمہ کرنے والی تاروں میں {{ handlebars }}
ٹیمپلیٹس ہو سکتے ہیں، یا تو دو یا تین گھوبگھرالی منحنی خطوط وحدانی کے ساتھ
آپ شاید نہیں چاہتے کہ ان ٹیمپلیٹس کے اندر موجود چیزوں کا ترجمہ کیا جائے۔
-H
/ --handlebars
پرچم کو پاس کریں، اور {{ ... }}
کے اندر کسی بھی چیز کا ترجمہ نہیں کیا جائے گا۔
مارک ڈاؤن نہ تو ٹیکسٹ ہے اور نہ ہی ایچ ٹی ایم ایل، اس لیے گوگل ٹرانسلیٹ کو اس میں کچھ مشکلات ہیں۔
-M
/ --markdown
پرچم مارک ڈاؤن فائلوں کے لیے خصوصی ہینڈلنگ کو قابل بناتا ہے۔
مارک ڈاؤن فائلوں کے ساتھ، اگر آپ -M
پرچم استعمال نہیں کرتے ہیں، تو آپ کو شاید یہ مسائل ملیں گے:
- ٹوٹے ہوئے لنکس۔ ترجمہ میں، مارک ڈاؤن لنک کی تفصیل ختم ہونے کے بعد ایک اسپیس کریکٹر ظاہر ہوتا ہے (
]
کے ساتھ) لیکن اس سے پہلے کہ اس کا ہدف کا لنک شروع ہو ((
کے ساتھ)۔ اس کی وجہ سے مارک ڈاؤن غلط طریقے سے رینڈر ہو جاتا ہے، اور لنک دستاویز دیکھتے وقت ٹوٹ جاتا ہے۔ - کوڈ بلاکس کا ترجمہ کیا جاتا ہے۔ گوگل ٹرانسلیٹ یہ نہیں جانتا کہ مارک ڈاؤن کس کوڈ کو سمجھتا ہے اور کس کو نہیں۔
- انڈینٹڈ کوڈ بلاکس کے لیے غلط وقفہ کاری۔ ترجمے میں وقفہ کو محفوظ کرنا مشکل ہے۔
backticks
کے اندر کی چیزوں کا ترجمہ ہو جائے گا، جب آپ تقریباً ہمیشہ یہ چاہتے ہیں کہ وہ لفظی قدر ہوں۔
جب -M
/ --markdown
جھنڈا فعال ہو:
- پیٹرن
](
کو گاڑھا کیا جائے گا](
اس طرح ٹوٹے ہوئے مارک ڈاؤن لنکس کو ٹھیک کرنا - ایک "ترجمہ نہیں" ریپر کو انڈینٹڈ کوڈ بلاکس کے ارد گرد رکھا جائے گا، مناسب انڈینٹیشن کو محفوظ رکھا جائے گا اور اس بات کو یقینی بنایا جائے گا کہ ان کا ترجمہ نہیں کیا گیا ہے۔
- ایک "ترجمہ نہیں" ریپر کو
backticks
کے اندر متن کے گرد رکھا جائے گا تاکہ یہ یقینی بنایا جا سکے کہ ان کا ترجمہ نہیں کیا گیا ہے۔
عام طور پر ہر چیز پر سادہ متن کے طور پر کارروائی کی جاتی ہے۔
اگر آپ کا مواد ایچ ٹی ایم ایل ہے، تو یہ الٹ جائے گا جب تک کہ آپ -p html
/ --process-as html
اختیار کو پاس نہیں کرتے
مہم جوئی کے لیے: ڈائریکٹری میں فائلوں پر کارروائی کرتے وقت، آپ -F
/ --filter
آپشن پاس کر سکتے ہیں۔
فائل سسٹم پر لکھے جانے سے پہلے آؤٹ پٹ کو فلٹر کرنے کے لیے
اس اختیار کی قدر JS فائل کا راستہ ہونا چاہیے جو filter
نامی فنکشن برآمد کرتی ہے۔
filter
فنکشن کو 'async' ہونا چاہیے کیونکہ await
async
اس پر کال کیا جائے گا۔
فائلوں کو ڈسک پر لکھے جانے سے پہلے، فائل کے پورے مواد کو سٹرنگ کے طور پر filter
فنکشن میں منتقل کر دیا جائے گا۔
filter
فنکشن سے واپسی کی قیمت وہی ہے جو اصل میں اسٹوریج میں لکھی جائے گی۔
اس طرح، آپ کا مکمل کنٹرول ہے کہ آخر میں کیا لکھا جائے گا۔
filter
اسکرپٹ کو درج ذیل مقامات پر تلاش کیا جائے گا ( .js
کے ساتھ فلٹر میں شامل کیا جائے گا
نام، جب تک کہ یہ پہلے ہی .js
پر ختم نہ ہو جائے)
- موجودہ ڈائریکٹری
- موجودہ ڈائرکٹری کے اندر
.hokey-filters
نام کی ایک ڈائرکٹری - ایک ڈائرکٹری جس کا نام ہے
${HOME}/.hokey-filters
، جہاں${HOME}
موجودہ صارف کی ہوم ڈائرکٹری ہے - بلٹ ان فلٹرز ڈائرکٹری
filter
سٹرنگ متعدد الفاظ ہو سکتی ہے۔ اس صورت میں، پہلا لفظ فلٹر کا نام ہے، اور
بقیہ الفاظ filter
فنکشن میں بطور دلیل بھیجے جائیں گے۔
مدد دکھانے کے لیے -h
/ --help
استعمال کریں۔
-j
/ --json
آپشن کے ساتھ، آپ متعدد مربوط hokey
کمانڈ چلا سکتے ہیں۔
کنونشن کے مطابق اس فائل کو hokey.json
کہا جاتا ہے، لیکن آپ اسے جو چاہیں نام دے سکتے ہیں۔
اگر آپ کسی ڈائرکٹری کو -j
اختیار کے طور پر پاس کرتے ہیں، تو hokey
hokeyاس ڈائریکٹری میں
hokey.json hokey.json
تلاش کرے گا۔
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' کی وضاحت کر سکتے ہیں،
'مارک ڈاؤن'، 'ٹیکسٹ'، یا آپ کے اپنے HandlebarsJS ٹیمپلیٹ کا فائل کا راستہ
اگر آپ خود اپنی ٹیمپلیٹ کی وضاحت کرتے ہیں، تو آپ کو -I
/ --index
کے لیے ایک فائل (ڈائریکٹری نہیں) بھی بتانی ہوگی۔
اختیار