Tag registration will certainly be usefull. I am not certain it will be enough for this particular case.
(mainly as an internationalization lib should be usable inside elements and for plain old javascript
We don't want to have 2 libs on the client side, and server side kits (like for django) are not compatible with polymer templates (because they also use mustache notation and get confused when they hit one)
My internationalization polymer element is x-lang.
The application.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Polymer test/title>
<script type="text/javascript" src="polymer/polymer.js"></script>
<link rel="import" href="x-lang.html" />
</head>
<body>
<polymer-element name="match-example">
<template>
<div> internat:(msg_hello) {{ "msg_hello"| upObject }}</div>
<div> internat:(sApply) {{ "sApply"| upObject }}</div>
</template>
<script>
Polymer('match-example', {
created: function() {
console.log("match-ex created");
} ,
});
</script>
</polymer-element>
<match-example id="me"></match-example>
<x-lang id='aid' ></x-lang>
</body>
</html>
as a result of loading the x-lang polymer file.
<link rel="import" href="polymer_cookie.html">
<polymer-element name="x-lang">
<template bind>
<polymer-cookie id="kuki" name="map"> </polymer-cookie>
<polymer-cookie id="kukil" name="lang"> </polymer-cookie>
</template>
<script>
(function() {
debug=false;
function getLanguage() {
kukies=document.cookies;
var pairs = document.cookie.split(/\s*;\s*/);
var map = pairs.map(function(kv) {
var eq = kv.indexOf('=');
return {
name: unescape(kv.slice(0, eq)),
value: unescape(kv.slice(eq + 1))
};
});
var lang= map.filter(function(kv){ return kv.name === "lang"; })[0]; console.log("found lang kuki", lang.value);
var langp=lang.value;
if (["fr","en"].indexOf(lang.value) == -1 ) {
if (navigator.language.indexOf("fr")> -1) langp = "fr";
if (navigator.language.indexOf("en")> -1) langp = "en";
}
return langp;
}
var endict = { color:"color"}
var frdict = { color:"couleur"}
var dict = { en: endict, fr:frdict, default:{color:"Kolor"}}
var urls=["Messages.properties" ,"Messages_en.properties"
,"Messages_fr.properties"];
//
// function to prepare the dictionary upon dll completion
function process(resp,url) {
var lang="default";
if (url.contains("_fr")) lang = "fr" ;
if (url.contains("_en")) lang = "en" ;
console.log("work on lang",lang);
var arr = resp.split("\n");
arr.forEach(function(e) {
if ( ! e.startsWith("#") ) {
var wordlist=e.split("=");
var key = wordlist[0].trim();
var removed = wordlist.splice(0, 1);
console.log(key , wordlist.join("="));
dict[lang][key]= wordlist.join("=");
}
});
}
//
// Load the dictionaries synchronously. as the dict
// must be setup before the upObject gets to be used.
urls.forEach(function(u) {
var xhr = new XMLHttpRequest();
xhr.open("GET", u, false); // synchronous request
xhr.send(null);
console.log(xhr.responseText);
process(xhr.responseText,u);
});
PolymerExpressions.filters.upObject = function() {