angular - कैसे एओटी संकलन के साथ कोणीय में एक वैकल्पिक i18n भाषा लिंक प्रदान करने के लिए?




internationalization angular2-aot (2)

मैं वर्तमान में अपने कोणीय एप्लिकेशन के i18n पर काम कर रहा हूं मैं यहाँ वर्णित अनुसार पूर्व संकलित क्षुधा बनाने के लिए एक्सएलएफ फाइलों के साथ एओटी संकलन का उपयोग करता हूं। निर्माण में, मैं एक भाषा विशिष्ट आधार href ( --base-href parm का उपयोग करके) प्रदान करता --base-href । उदाहरण के लिए, इसका मतलब है, मैं निम्न यूआरएल पथों का उपयोग करते हुए दो भाषा विशिष्ट ऐप्स के साथ समाप्त होता है:

  • / App_path / en / ...
  • / App_path / डी / ...

अब मैं सक्रिय यूआरएल में उदाहरण के लिए जगह ले कर अपने ऐप के भीतर संबंधित वैकल्पिक भाषा का एक लिंक प्रदान करना चाहता हूं। मैंने राउटर इंजेक्शन का इस्तेमाल किया, इसलिए मैं अपनी यूआरएल प्रॉपर्टी का उपयोग कर सकता हूं, लेकिन यह प्रॉपर्टी मुझे आधार-href सहित पूर्ण यूआरएल नहीं देती

मैं किसी एंजियर ऐप के अंदर से बेस यूआरएल कैसे खोज सकता / सकती हूं?

वैकल्पिक रूप से, क्या ऐप के लिए बनाया गया भाषा का पता लगाने का एक तरीका है? क्या मैं एक्सलिफ फ़ाइलों से लक्षित भाषा की संपत्ति को किसी भी तरह से एक्सेस कर सकता हूं?


जब आप एनजी बिल्ड प्रक्रिया में लोकेल को सेट की जाने वाली विभिन्न भाषाओं के लिए अपना ऐप संकलित करते हैं:

./node_modules/.bin/ngc --i18nFile=./locale/messages.es.xlf --locale=es --i18nFormat=xlf

आप अपने घटक को इंजेक्शन द्वारा इस लोकेल तक पहुंच सकते हैं:

import { Inject, LOCALE_ID } from '@angular/core';
...
constructor(@Inject(LOCALE_ID) locale: string, ...

फिर आप मौजूदा भाषा का निर्धारण करने के लिए लोकेल स्ट्रिंग का उपयोग कर सकते हैं। ऊपर दिए गए उदाहरण में लोकेल "es" पर सेट किया गया था

उम्मीद है की यह मदद करेगा


सबसे पहले, कोणीय रूटर और स्थान ऑब्जेक्ट्स को इंजेक्ट करें (सुनिश्चित नहीं है कि राउटर क्यों चाहिए):

constructor(private router: Router, private location: Location) {}

फिर, आधार पथ (आधार href) निर्धारित करने के लिए:

let fullpath = this.location.prepareExternalUrl(this.location.path());
let basepath = fullpath.substr(0, fullpath.lastIndexOf(this.location.path().substr(1)));

अंत में, आप वैकल्पिक भाषा यूआरएल ( urls ) की एक सूची बना सकते हैं:

const languages = ["en", "de", "fr", "it"];  // List of available languages 
let urls = [];
for (let lang of languages) {
  let url = basepath.replace(/\/(..)\/$/, "/" + lang + "/") + this.location.path().substr(1);
  if (url !== fullpath) {
    urls.push(url);
  }
}

नोट करें कि basepath.replace स्लैश के बीच एक दो-वर्ण भाषा कोड मानता है। यह "एन-यू" जैसे कुछ के लिए काम नहीं करेगा, जिसके लिए थोड़ा बढ़ाया रीजेक्स की आवश्यकता होगी। मुझे अभी भी वर्तमान में चल रहे ऐप की भाषा की पहचान करने का कोई तरीका नहीं मिला है