मेरे पास एक पुरानी कोणीय परियोजना (v8) है जहां मैंने अपने सभी अनुवादों को टैग करने के लिए i18n का उपयोग किया है। मेरे पास 2 xlf फ़ाइलें हैं, एक en के लिए और एक fr के लिए - और रनटाइम पर चुनें कि किस फ़ाइल का उपयोग करना है। यह ठीक काम करता है।

हालांकि, एक नई कोणीय परियोजना (v11) में यह दृष्टिकोण अब काम नहीं करता है। कोड त्रुटि नहीं करता है, और यह सुझाव नहीं देता है कि कोई समस्या है, हालांकि पाठ का स्क्रीन पर अनुवाद नहीं किया गया है।

Main.ts फ़ाइल में कोड इस प्रकार है

let languageCode: string = localStorage.getItem("language") ? localStorage.getItem("language") : 'en-GB';

// use the require method provided by webpack
// we use the webpack raw-loader to return the content as a string
declare const require;

var translations = undefined;

switch (languageCode) {
    case AppService.Languages.english:
        break;
  default:
        translations = require(`raw-loader!./locale/messages.${languageCode}.xlf`);
  break;
}
 
platformBrowserDynamic().bootstrapModule(AppModule, {
  providers: [
    {provide: TRANSLATIONS, useValue: translations},
    {provide: TRANSLATIONS_FORMAT, useValue: 'xlf'},
    {provide: LOCALE_ID, useValue: languageCode }
  ]
});

मेरे पास app.module.ts में निम्नलिखित भी हैं

import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
import localeFrExtra from '@angular/common/locales/extra/fr';

let urlParams: URLSearchParams = new URLSearchParams(window.location.search);
let languageCode: string = localStorage.getItem("language") ? localStorage.getItem("language") : 'en-GB';

registerLocaleData(localeFr, 'fr-FR', localeFrExtra);

.....

 providers: [
    { provide: LOCALE_ID, useValue: languageCode },

क्या किसी और को इस दृष्टिकोण के साथ नए कोणीय संस्करणों में काम नहीं करने का अनुभव है?

नोट: इनबिल्ड चीजें जैसे दिनांक स्वरूपण सही लोकेल में आ रहा है - ईजी दिनांक स्वरूपण 01 दिसंबर 20। यह विशुद्ध रूप से i18n प्रतिस्थापन है जो नहीं किया जा रहा है।

0
sianabanana 1 पद 2020, 18:53

1 उत्तर

सबसे बढ़िया उत्तर

मैंने वास्तव में अतिरिक्त कोड जोड़ा, हालांकि अब मुझे एहसास हुआ कि यदि आप आईवी - (tsconfig.json - angularCompilerOptions - "enableIvy": false) का उपयोग करते हैं तो यह स्पष्ट रूप से रनटाइम पर उपरोक्त कोड के साथ काम नहीं करता है।

मैंने i18n के लिए किए गए परिवर्तनों पर ivy दस्तावेज़ पढ़े हैं और मैं देख सकता हूं कि वे रनटाइम पर अनुवादों को बदलने का इरादा नहीं रखते थे।

मैंने आइवी को बंद कर दिया है और पुराना कोड अब काम करता है।

मैं उनका तर्क देख सकता हूं, लेकिन मेरे पास प्रति भाषा एक अलग यूआरएल नहीं हो सकता है इसलिए यह मेरा एकमात्र विकल्प है।

0
sianabanana 3 पद 2020, 10:54