2014-07-14 7 views
23

मैं एक बड़े कोणीय परियोजना पर कोणीय-अनुवाद का उपयोग कर रहा हूं। मैं इसे अधिक प्रबंधनीय बनाने के लिए प्रोजेक्ट को कई मॉड्यूल में तोड़ रहा हूं, लेकिन मैं प्रति मॉड्यूल में अपने अनुवाद स्ट्रिंग को तोड़ने में असमर्थ हूं।कोणीय-अनुवाद में अनुवाद तारों को व्यवस्थित करने के लिए कैसे करें?

उदाहरण के लिए, मेरे पास मॉड्यूल ए और बी है, जहां बी ए का एक सबमिशन है। ऐसे स्ट्रिंग हैं जो मॉड्यूल ए द्वारा कवर किए गए HTML से संबंधित हैं, जो '/json/localization/A/en.json में रखी गई हैं '। इसी प्रकार, बी से संबंधित तार हैं जो मैं '/json/localization/B/en.json' में रखता हूं। सबसे पहले मैं कोणीय-अनुवाद के $ अनुवाद प्रदाता का उपयोग कर मॉड्यूल बी में बी के en.json लोड करता हूं। फिर मैं मॉड्यूल ए के en.json लोड करता हूं, $ अनुवाद प्रदाता का भी उपयोग करता हूं। समस्या यह है कि ए के तारों को लोड करना बी के तारों को ओवरराइड करता है और वे खो जाते हैं।

कोणीय-अनुवाद का उपयोग करना, प्रति मॉड्यूल के बिना स्ट्रिंग लोड करने का कोई तरीका है, बिना ओवरराइड किए, या माता-पिता मॉड्यूल को एक एकल en.json से सभी तारों को लोड करना पड़ता है?

my_module.config(['$translateProvider', ($translateProvider) -> 
    $translateProvider.useStaticFilesLoader 
    prefix: '/json/localization/A/' 
    suffix: '.json' 

    $translateProvider.preferredLanguage 'en' 
]) 

उत्तर

33

कोणीय-अनुवाद आंशिक भाषा फ़ाइलों की async लोड हो रहा है समर्थन करता है:

यहाँ कैसे मैं अनुवाद तार लोड हो रहा हूँ का एक उदाहरण (coffeescript में) है। सभी आंशिक प्रति भाषा एक शब्दकोश में विलय कर रहे हैं। आधिकारिक दस्तावेज यहां पाया जा सकता: http://angular-translate.github.io/docs/#/guide/12_asynchronous-loading

यह URL टेम्प्लेट कि modularised भाषा फ़ाइलों को इंगित करने के लिए एक टेम्पलेट लागू करने का समर्थन:

$translateProvider.useLoader('$translatePartialLoader', { 
    urlTemplate: '/i18n/{part}/{lang}.json' 
}); 

अपने नियंत्रकों अंदर से, आप भाषा मॉड्यूल जोड़ने और ताज़ा कर सकते हैं इस तरह डेटा बाइंडिंग:

angular.module('contact') 
    .controller('ContactCtrl', 
    function ($scope, $translatePartialLoader, $translate) { 
     $translatePartialLoader.addPart('contact'); 
     $translate.refresh(); 
    }); 
बेशक

, आंशिक लोड हो रहा है यह भी एक मार्ग के संकल्प चरण

01 में शामिल किया जा सकता है

वैकल्पिक रूप से, आप अपना खुद का कस्टम लोडर फ़ंक्शन बनाने में भी देख सकते हैं। http://angular-translate.github.io/docs/#/guide/13_custom-loaders

यह एक शॉट में आवश्यक भाषा मॉड्यूल को गठबंधन करने के लिए आवश्यक सभी लचीलापन प्रदान करता है। जैसे आप ऐसा कुछ कर सकते हैं:

app.factory('customLoader', function ($http, $q) { 
    // return loaderFn 
    return function (options) { 
    var deferred = $q.defer(); 
    var data = { 
     'TEXT': 'Fooooo' 
    }; 
    $http.get('nls/moduleA/en.json').success(function(moduleA){ 
     angular.extend(data, moduleA); 
     $http.get('nls/moduleB/en.json').success(function(moduleB){ 
     angular.extend(data, moduleB); 
     deferred.resolve(data); 
     }); 
    }); 
    return deferred.promise; 
    }; 
}); 
+0

इस समाधान के साथ आप एफओयूसी (अप्रतिबंधित सामग्री का फ्लैश) कैसे रोक सकते हैं? – ingaham

+1

मॉड्यूल लेखकों ने इस प्रश्न का उत्तर दिया है [पृष्ठ पर पहले से ही उनके गाइड में] (https://angular-translate.github.io/docs/#/guide/12_asynchronous-loading) पृष्ठ के बारे में 3/4। वैकल्पिक रूप से, आप अनुवादित सामग्री को अपने मार्ग के लिए "समाधान" गुणों में जोड़ सकते हैं। दोनों, ngRouter और uiRouter इसका समर्थन करते हैं। – benkroeger

+0

क्या उत्पादन में (सभी minified * .js के साथ) urlTemplate उपयोग में निर्दिष्ट लोडर परिवर्तन, आप इसे कैसे संभालेंगे? – enricop89

संबंधित मुद्दे