मैं Google अनुवाद के माध्यम से अपना पूरा ऐप या साइट क्यों नहीं चला सकता और किसी अन्य भाषा में मूल अनुवाद प्राप्त नहीं कर सकता?
अब आप कर सकते हैं!
नाम hokeylization
एक पोर्टमैंट्यू है, जिसका अर्थ है 'होकी स्थानीयकरण'
यह कुछ हद तक आसान है क्योंकि यह बहुत आसान है: यह Google अनुवाद को तार भेजता है
और यह सरल है, फिर भी बहुत शक्तिशाली भी है। इसमें HTML दस्तावेज़ों के लिए विशेष समर्थन है, हैंडलबार्सजेएस टेम्प्लेट, और मार्कडाउन फाइलें।
आप अनुवाद कर सकते हो:
- संदेश युक्त एक जावास्क्रिप्ट वस्तु
- फ़ाइलों या निर्देशिकाओं की कोई भी संख्या, हमेशा निर्देशिकाओं को पुनरावर्ती रूप से ट्रैवर्स करना
#इसे दूसरी भाषा में पढ़ें इस README.md दस्तावेज़ का अनुवाद होकेलाइज़ेशन टूल का उपयोग करके किया गया है Google अनुवाद द्वारा समर्थित प्रत्येक भाषा!
मुझे यकीन है कि यह सही नहीं है, लेकिन मुझे आशा है कि यह कुछ भी नहीं से बेहतर है!
🇸🇦 अरबी 🇧🇩 बंगाली 🇩🇪 जर्मन 🇺🇸 अंग्रेजी 🇪🇸 स्पेनिश 🇫🇷 फ़्रेंच 🇹🇩 हौसा 🇮🇳 हिन्दी 🇮🇩 इन्डोनेशियाई 🇮🇹 इटालियन 🇯🇵 जापानी 🇰🇷 कोरियाई 🇮🇳 मरांथी 🇵🇱 पोलिश 🇧🇷 पुर्तगाली 🇷🇺 रूसी 🇰🇪 स्वाहिली 🇵🇭 तागालोग 🇹🇷 तुर्की 🇵🇰 उर्दू 🇻🇳 वियतनामी 🇨🇳 चीनी
मूल README का यह विशेष अनुवाद त्रुटिपूर्ण हो सकता है -- सुधारों का बहुत स्वागत है! कृपया GitHub पर पुल अनुरोध भेजें, या यदि आप ऐसा करने में सहज नहीं हैं, एक मुद्दा खोलें
जब आप अनुवाद के बारे में एक नया GitHub मुद्दा बनाते हैं, तो कृपया यह करें:
- पेज यूआरएल शामिल करें (ब्राउज़र एड्रेस बार से कॉपी/पेस्ट करें)
- सटीक टेक्स्ट शामिल करें जो गलत है (ब्राउज़र से कॉपी/पेस्ट करें)
- कृपया बताएं कि क्या गलत है -- क्या अनुवाद गलत है? स्वरूपण किसी भी तरह टूटा हुआ है?
- कृपया एक बेहतर अनुवाद का सुझाव दें, या पाठ को ठीक से कैसे स्वरूपित किया जाना चाहिए
- आपको धन्यवाद!
- [स्रोत](# स्रोत)
- [सहायता और वित्त पोषण](# समर्थन और वित्त पोषण)
- [स्थापना](# स्थापना)
- सेटअप
- [एक जावास्क्रिप्ट स्ट्रिंग संसाधन फ़ाइल का अनुवाद करना](# अनुवाद-ए-जावास्क्रिप्ट-स्ट्रिंग-संसाधन-फ़ाइल)
- [पाठ फ़ाइलों की निर्देशिका का अनुवाद करना](# अनुवाद-ए-निर्देशिका-की-पाठ-फ़ाइलें)
- [अन्य विकल्प](# अन्य विकल्प)
- [JSON बैच कमांड](# 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 अनुवाद प्रोजेक्ट की पहचान करने के लिए GOOGLE_TRANSLATE_PROJECT_ID
पर्यावरण चर सेट करें
आपके द्वारा डाउनलोड किए गए JSON क्रेडेंशियल के लिए GOOGLE_APPLICATION_CREDENTIALS
पर्यावरण चर सेट करें
यह पता लगाने के बाद कि प्रमाणीकरण Google क्लाउड पर कैसे काम करता है (यह मजेदार हो सकता है)
यदि आप स्रोत कोड से चल रहे हैं, तो आप इन्हें स्रोत में .env
फ़ाइल में भी डाल सकते हैं
निर्देशिका वे dotenv के माध्यम से रनटाइम पर लोड की जाएंगी
आपकी स्ट्रिंग तालिका चाहिए इन दो रूपों में से किसी एक में JavaScript फ़ाइल में होनी चाहिए:
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 अनुवाद द्वारा समर्थित
यदि आउटपुट फ़ाइल पहले से मौजूद है, तो यह निर्धारित करने के लिए जांच की जाएगी कि कौन सी कुंजियाँ पहले से मौजूद हैं। मौजूदा कुंजियों का अनुवाद नहीं किया जाएगा. गुम चाबियों के अनुवाद उत्पन्न और संलग्न किए जाएंगे JS ऑब्जेक्ट के अंत तक। पूरी फाइल हमेशा फिर से लिखी जाती है।
सभी कुंजियों के पुनर्अनुवाद को बाध्य करने के लिए, -f
/ --force
विकल्प का उपयोग करें
आप फ़ाइलों की निर्देशिका का अनुवाद भी कर सकते हैं। होकेलाइज़ेशन हर बार बार-बार आएगा निर्देशिका में फ़ाइल करें और Google अनुवाद के माध्यम से इसकी सामग्री चलाएं, और आउटपुट सहेजें एक अलग निर्देशिका ट्री में एक समान रूप से नामित फ़ाइल के लिए
जब आपके अनुवाद का लक्ष्य एक निर्देशिका है, तो यह मोड सक्षम है
-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
विकल्प का मान एक रेगेक्स है (नियमों को उद्धृत करने वाले शेल से सावधान रहें!) जो निर्दिष्ट करता है
किन फाइलों का अनुवाद किया जाना चाहिए
जब संदेह हो, तो आप इस विकल्प को -n
/ --dry-run
साथ जोड़कर देख सकते हैं कि किन फाइलों का अनुवाद किया जाएगा
कभी-कभी आपका -m
बहुत अधिक फाइलों से मेल खाता है। स्पष्ट रूप से बहिष्कृत करने के लिए -e
/ --excludes
विकल्प का उपयोग करें
फ़ाइलें जो अन्यथा मेल खातीं
आप रिक्त स्थान द्वारा अलग किए गए एकाधिक रेगेक्स सूचीबद्ध कर सकते हैं
एक सामान्य उपयोग होगा: --excludes node_modules dist \.git build tmp
अनुवाद करने के लिए स्ट्रिंग में {{ handlebars }}
टेम्प्लेट हो सकते हैं, या तो दो या तीन घुंघराले ब्रेसिज़ के साथ
आप शायद नहीं चाहते हैं कि उन टेम्प्लेट के अंदर की सामग्री का अनुवाद किया जाए
-H
/ --handlebars
ध्वज पास करें, और {{ ... }}
के भीतर कुछ भी अनुवादित नहीं किया जाएगा
मार्कडाउन न तो टेक्स्ट है और न ही html, इसलिए Google अनुवाद में इसके साथ कुछ कठिनाइयाँ हैं
-M
/ --markdown
फ्लैग मार्कडाउन फाइलों के लिए विशेष हैंडलिंग को सक्षम बनाता है
मार्कडाउन फाइलों के साथ, यदि आप -M
ध्वज का उपयोग नहीं करते हैं, तो आपको शायद ये समस्याएं मिलेंगी:
- टूटे हुए लिंक। अनुवाद में, एक मार्कडाउन लिंक विवरण समाप्त होने के बाद एक स्पेस कैरेक्टर दिखाई देता है (
]
के साथ) लेकिन इसके लक्ष्य लिंक शुरू होने से पहले ((
के साथ)। इससे मार्कडाउन गलत तरीके से प्रस्तुत हो जाता है, और लिंक दस्तावेज़ देखते समय टूट जाता है। - कोड ब्लॉक का अनुवाद किया जाता है। Google अनुवाद नहीं जानता कि मार्कडाउन कोड को क्या मानता है और क्या नहीं
- इंडेंट कोड ब्लॉक के लिए गलत स्पेसिंग। अनुवाद में रिक्ति को संरक्षित करना कठिन है
backticks
के अंदर की चीजें अनुवादित हो जाएंगी, जब आप लगभग हमेशा चाहते हैं कि वे शाब्दिक मूल्य हों
जब -M
/ --markdown
ध्वज सक्षम होता है:
- पैटर्न
](
को संघनित किया जाएगा](
इस प्रकार टूटे हुए मार्कडाउन लिंक को ठीक करना - एक "नो ट्रांसलेशन" रैपर इंडेंट कोड ब्लॉक के आसपास रखा जाएगा, उचित इंडेंटेशन को संरक्षित करेगा और यह सुनिश्चित करेगा कि उनका अनुवाद नहीं किया गया है
- यह सुनिश्चित करने के लिए कि उनका अनुवाद नहीं किया गया है,
backticks
के भीतर पाठ के चारों ओर "कोई अनुवाद नहीं" आवरण रखा जाएगा
आम तौर पर सब कुछ सादे पाठ के रूप में संसाधित किया जाता है
यदि आपकी सामग्री HTML है, तो यह तब तक खराब हो जाएगी जब तक आप -p html
/ --process-as html
विकल्प पास नहीं करते
साहसी लोगों के लिए: किसी निर्देशिका में फ़ाइलों को संसाधित करते समय, आप -F
/ --filter
विकल्प पास कर सकते हैं
फ़ाइल सिस्टम में लिखे जाने से पहले आउटपुट को फ़िल्टर करने के लिए
इस विकल्प का मान JS फ़ाइल का पथ होना चाहिए जो filter
नामक फ़ंक्शन को निर्यात करता है
filter
फ़ंक्शन
asyncहोना चाहिए क्योंकि
await` को उस पर बुलाया जाएगा
फ़ाइलों को डिस्क पर लिखे जाने से पहले, संपूर्ण फ़ाइल सामग्री को filter
फ़ंक्शन में एक स्ट्रिंग के रूप में पास किया जाएगा
filter
फ़ंक्शन से वापसी मूल्य वह है जो वास्तव में भंडारण के लिए लिखा जाएगा
इस प्रकार, अंत में क्या लिखा जाएगा, इस पर आपका पूरा नियंत्रण है
filter
स्क्रिप्ट को निम्न स्थानों में खोजा जाएगा ( .js
के साथ फ़िल्टर में जोड़ा जाएगा)
नाम, जब तक कि यह पहले से ही .js
में समाप्त न हो जाए)
*वर्तमान निर्देशिका
- वर्तमान निर्देशिका के भीतर
.hokey-filters
नाम की एक निर्देशिका ${HOME}/.hokey-filters
नामक एक निर्देशिका, जहां${HOME}
वर्तमान उपयोगकर्ता की होम निर्देशिका है- अंतर्निहित फ़िल्टर निर्देशिका
filter
स्ट्रिंग एकाधिक शब्द हो सकती है। इस मामले में, पहला शब्द फ़िल्टर नाम है, और
शेष शब्द filter
फ़ंक्शन के तर्क के रूप में पारित किए जाएंगे
सहायता दिखाने के लिए -h
/ --help
का प्रयोग करें
-j
/ --json
विकल्प के साथ, आप कई समन्वित hokey
कमांड चला सकते हैं
परंपरा के अनुसार इस फ़ाइल को hokey.json
कहा जाता है, लेकिन आप इसे जो चाहें नाम दे सकते हैं
यदि आप किसी निर्देशिका को -j
विकल्प के रूप में पास करते हैं, तो 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
का उपयोग करें। आप 'एचटीएमएल' निर्दिष्ट कर सकते हैं,
'markdown', 'text', या आपके अपने HandlebarsJS टेम्पलेट का फ़ाइल पथ
यदि आप अपना स्वयं का टेम्पलेट निर्दिष्ट करते हैं, तो आपको -I
/ --index
के लिए एक फ़ाइल (निर्देशिका नहीं) भी निर्दिष्ट करनी होगी
विकल्प