2016-06-16 7 views
6

बहुलक प्रलेखन के अनुसार के लिए app-localize-behaviorएप्लिकेशन-स्थानीय बनाना-व्यवहार और साझा स्थानीयकरण कैश

प्रत्येक तत्व है कि Polymer.AppLocalizeBehavior जोड़ना चाहिए स्थानीय की जाने वाली सामग्री प्रदर्शित करता है। इन सभी तत्वों में एक सामान्य स्थानीयकरण कैश, साझा किया जाता है, इसलिए आपको केवल पर अनुवाद लोड करने की आवश्यकता है।

निम्नलिखित स्निपेट (this answer से रूपांतरित) टैग

शायद मैं कुछ छूट में साझा संसाधन नहीं मिल रहा है में?

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <base href="https://polygit.org/polymer+:master/components/"> 
 
    <script src="webcomponentsjs/webcomponents-lite.min.js"></script> 
 
    <script src="https://rawgit.com/yahoo/intl-messageformat/d361003/dist/intl-messageformat.min.js"></script> 
 

 
    <link rel="import" href="polymer/polymer.html"> 
 
    <link rel="import" href="paper-toggle-button/paper-toggle-button.html"> 
 
    <link rel="import" href="app-localize-behavior/app-localize-behavior.html"> 
 

 
</head> 
 

 
<body> 
 
    <x-local-translate></x-local-translate> 
 

 
    <dom-module id="x-local-translate"> 
 
    <template> 
 

 
     <div> 
 
     <span title="english"></span> 
 
     <paper-toggle-button on-change="_toggle" id="switch"></paper-toggle-button> 
 
     <span title="french"></span> 
 
     </div> 
 

 
     <div> 
 
     <h4>Outside Repeater</h4> 
 
     <div> 
 
      <div>{{localize('greeting')}}</div> 
 
     </div> 
 

 
     <h4>Template Repeater Items</h4> 
 
     <template is="dom-repeat" items="{{things}}"> 
 
      <div>{{localize('greeting')}}</div> 
 
     </template> 
 

 

 
     <x-local-test></x-local-test> 
 
     </div> 
 
    </template> 
 

 
    <script> 
 
     Polymer({ 
 
     is: "x-local-translate", 
 
     behaviors: [ 
 
      Polymer.AppLocalizeBehavior 
 
     ], 
 
     properties: { 
 
      things: { 
 
      type: Array, 
 
      value: function() { 
 
       return [1, 2, 3]; 
 
      } 
 
      }, 
 

 
      /* Overriden from AppLocalizeBehavior */ 
 
      language: { 
 
      value: 'en', 
 
      type: String 
 
      }, 
 

 
      /* Overriden from AppLocalizeBehavior */ 
 
      resources: { 
 
      type: Object, 
 
      value: function() { 
 
       return { 
 
       'en': { 
 
        'greeting': 'Hello!' 
 
       }, 
 
       'fr': { 
 
        'greeting': 'Bonjour!' 
 
       } 
 
       }; 
 
      } 
 
      } 
 
     }, 
 
     _toggle: function() { 
 
      this.language = this.$.switch.checked ? 'fr' : 'en'; 
 
     } 
 
     }); 
 
    </script> 
 
    </dom-module> 
 

 
    <dom-module id="x-local-test"> 
 
    <template> 
 
     <h4>Inside x-local-test</h4> 
 
     <div>{{localize('greeting')}}</div> 
 
    </template> 
 

 
    <script> 
 
     Polymer({ 
 
     is: "x-local-test", 
 
     behaviors: [ 
 
      Polymer.AppLocalizeBehavior 
 
     ], 
 

 
     properties: { 
 
      things: { 
 
      type: Array, 
 
      value: function() { 
 
       return [1, 2, 3]; 
 
      } 
 
      } 
 
     }, 
 

 
     }); 
 
    </script> 
 
    </dom-module> 
 

 
</body> 
 

 
</html>

अब निम्नलिखित बेला में, मैं इसे एक्स-स्थानीय परीक्षण गुण के रूप में संसाधनों और भाषा वस्तु पारित करके काम कर दिया। https://jsfiddle.net/g4evcxzn/2/

लेकिन यह बिना कि

उत्तर

6

काम करना चाहिए मैं AppLocaleBehavior's demo पर एक नज़र लिया और अगर आप वास्तव में रेपो को देखो, वे इसके लिए दो तत्वों, एक कि loads the resources from an external json और एक और उन्हें locally defined और में है कि का उपयोग डेमो, ऐसा लगता है कि आपके साथ क्या हो रहा है, कैश साझा नहीं कर रहा है।

इसने मुझे अजीब रूप से देखा कि वे कैश का उल्लेख करते हैं, इसलिए मैंने behavior's code पर एक नज़र डाली और कुछ दिलचस्प पाया, कैश वास्तव में मौजूद है लेकिन ऐसा लगता है कि इसका उद्देश्य बाहरी संसाधन को कई बार लोड करना बंद करना है resources संपत्ति साझा करने के बजाय।

इसलिए, यदि आप जाने के लिए एक साझा संसाधन होने की जाएगी जिस तरह से कई तत्वों पर स्थानीयकरण संसाधनों को साझा करना चाहते हैं (मान लीजिए कि हम इसे locales.json कॉल) और के बाद से अनुरोध कैश किया गया है उन्हें (में से हर एक पर loadResources फ़ंक्शन को कॉल करें आपको फ़ाइल को कई बार लोड करने की चिंता करने की आवश्यकता नहीं है)।

attached: function() { 
    this.loadResources(this.resolveUrl('locales.json')); 
} 
+0

नोट आप भी एक भाषा संपत्ति को परिभाषित करने के लिए है कि: 'भाषा: {मूल्य: 'एन'}' तो ई है करने के लिए ऐप में बहुत ही स्थानीय तत्व एक ही भाषा प्रदर्शित करते हैं, हमें प्रत्येक तत्व को भाषा को पास करना होगा। क्या यह कोई मुद्दा नहीं है? –

+0

मुझे सच में नहीं लगता कि यह समस्या का बड़ा है, मेरा मतलब है, आप वास्तव में अलग-अलग भाषाओं में अलग-अलग भाषाओं में प्रदर्शित होने के लिए अलग-अलग भाषाओं में दिखाना चाहते हैं, इसलिए आपको यह तय करना चाहिए कि आप भाषा संपत्ति साझा करते हैं या नहीं – Alan

+1

मैं क्या कर रहा हूं उस समस्या से निपटने के लिए एक ऐसा व्यवहार बनाना था जो पॉलिमर को विस्तारित करता था। AppLocalizationBehavior, वहां मैं संसाधन फ़ाइल लेता हूं और भाषा सेट करता हूं।मेरे आवेदन में तब व्यवहार शामिल होगा जो मैंने अभी परिभाषित किया है और मैं हर जगह भाषा को स्थापित करने से बचूंगा। –

8

कॉपी/पेस्ट के लिए कुछ उदाहरण कोड जोस ए और जीन-Rémi के विचारों यहाँ अनुसार::

<link rel="import" href="../bower_components/polymer/polymer.html"> 
    <link rel="import" href="../bower_components/app-localize-behavior/app-localize-behavior.html"> 

    <script> 
     MyLocalizeBehaviorImpl = { 
     properties: { 
      language: { 
      value: 'de' 
      } 
     }, 
     attached: function() { 
      this.loadResources(this.resolveUrl('locales.json')); 
     } 
     }; 
     MyLocalizeBehavior = [MyLocalizeBehaviorImpl, Polymer.AppLocalizeBehavior]; 
    </script> 

में व्यवहार फ़ाइल शामिल आप attached कॉलबैक इस तरह पर यह कर सकता है सभी अपने कस्टम घटकों और व्यवहार जोड़ें:

<link rel="import" href="./my-localize-behavior.html"> 

...... 

behaviors: [ 
    MyLocalizeBehavior 
], 
+0

यह भी है कि मैंने –

+0

को समाप्त कर दिया है क्या ऊपर किए गए लोकेशंस.जेसन के साथ ब्राउज़र कैशिंग मुद्दों के बारे में क्या है? बदलाव पर नवीनतम लोकल फ़ाइल का उपयोग कैसे कर सकता है? – sinjins

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