eligrey / l10n.js Goto Github PK
View Code? Open in Web Editor NEWPassive localization JavaScript library
Home Page: http://purl.eligrey.com/l10n.js
License: Other
Passive localization JavaScript library
Home Page: http://purl.eligrey.com/l10n.js
License: Other
Please, use:
"ru": {
"%title": "Русский - l10n.js demo",
"%info": "Вы просматриваете Русскую версию этой страницы."
},
An issue occurs when L10N is being used in a browserless environment, such as being run directly using Node.
The issues largely come from the assumption that certain objects will exist, such as self
, XMLHttpRequest
and document
, with the former two causing ReferenceErrors when they are reached in the code. This is particularly a problem when it comes to running Unit Tests on localization code inside environments like Mocha.
The errors in question are as follows:
ReferenceError: self is not defined at l10n.js:20:9
and
ReferenceError: XMLHttpRequest is not defined at l10n.js:196:11
I have a proposed set of changes to fix this issue for Node that I can create a PR for, if it is considered something that is in scope for the library to handle.
Hi all!
First of all, tthis is not an issue, but rather a question.
But since I couldn't find an answer, here goes:
Is it possible to programatically translate a resource?
In the current app I am developing, we give the user the option to change the current locale.
However it seems easy at first, we need to warn the user about the language being changed (not in its current locale, but rather in the option's locale).
Something like <locale>: <locale_warning>
English: Warning, the application will be set to english.
Português: Aviso, o idioma da aplicação mudará para português.
Best regards,
tbragaf
Hi,
Using the 2-year old Chrome 39 (2014-11), I've got a "use const in strict mode" syntax error in l10n.js:
return Function.prototype[$to_locale_string].apply(String_ctr, arguments);
}
, loadFromDisk = String_ctr[$to_locale_string] = function (uri) {
const fs = require('fs');
^^^^^
By removing the strict mode or changing const to var, it was possible to fix the problem, for example:
diff -u node_modules/l10n-for-node.old/l10n.js node_modules/l10n-for-node/l10n.js
--- node_modules/l10n-for-node.old/l10n.js 2016-12-01 13:41:50.301318129 +0100
+++ node_modules/l10n-for-node/l10n.js 2016-12-01 13:43:31.765314513 +0100
@@ -130,7 +130,7 @@
return Function.prototype[$to_locale_string].apply(String_ctr, arguments);
}
, loadFromDisk = String_ctr[$to_locale_string] = function (uri) {
- const fs = require('fs');
+ var fs = require('fs');
var read = fs.readFileSync(uri, 'utf8');
return JSON.parse(read);
Thanks for your work,
Laszlo
Hi,
In order for Bower to work, you need to add tags for each version (this is equivalent to npm's publish functionality).
In case you haven't done this:
version
property to your bower.json like "0.1.0".git tag -a v0.1.0 -m 'my version 0.1.0'
git push origin --tags
(Note that in Windows command line, double quotes are needed for step 2.)
Hey man, I am having trouble getting this to work when running in an IOS app. It seems like the string prototype is not getting the new method. Has this been tested in that env?
Ok since my other questions I have been testing this out and I cannot seem to get it to work in any manner using a .json
file included as per the instructions under the Usage section, it seems to take no notice of it whatsoever.
I then tried the way it was done in the Demo section and I got it to work, however it doesn't seem to honor country code locales, eg:
With that in mind I'm unsure you even set the Language/locale you wish to use if you aren't using the link tag such as:
<link rel="localization" hreflang="en-US" href="american-english.json" type="application/vnd.oftn.l10n+json"/>
Does the script look at the value of the lang
attribute of the html
tag?
Anyway, I have it set as such:
<html lang="en-GB">
...and then I have included the main library followed by a .js
file with this inside it:
String.toLocaleString({
"en": {
"Hello!": "Hello!!!!!!!!"
},
"en-GB": {
"Hello!": "Hola!"
},
"en-AU": {
"Hello!": "Hola!!!!!!!!!!!"
}
});
When I do any translations this will output: Hello!!!!!!!!
when it should output Hola!
If I only include the en-GB
locale such as:
String.toLocaleString({
"en-GB": {
"Hello!": "Hola!"
}
});
Then it doesn't do anything and just outputs the same text as I passed in.
Can you please advise?
Thanks!
In some browsers/environments the request seems to finish with a status code of 0 even though the request was successful. I've experienced this in the iOS web view (using Cordova) but I'm sore there are other environments where this happens. I suggest basing success/failure on a successful parsing of the response text instead of relying on possibly inconsistent status codes.
I am working in a project in which we want to process a json such as:
{ "id":0, "name":"monopoly","description":
{"en":"Monopoly is a board game that originated in the United States in 1903"
,"es":"Monopoly es un juego de mesa de intercambio y de bienes raíces"
}}
I like the easiness of this library and would like to contribute a patch to allow processing this kind of formats. I imagine it like this:
String.toLocaleString(retrievedObjectWithLocalizedData,"reverseFormat");
"description".toLocaleString();
We want to opt for this format because the localized data is editable and stored in the database.
As such, it makes a lot of sense to return localization values together with queried data.
Do you find it worth the extra complexity and effort as to accept a PR?
Do you have some feedback, syntactic preferences, or any concerns?
IE7 and 8 do not like Array#indexOf which is used in your l10n.js. Please have a look at the "Compatibility" section of
https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/IndexOf
Hi! i'm getting this error:
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
from
req.open("GET", uri, FALSE);
i know the line above that one says:
// sadly, this has to be blocking to allow for a graceful degrading API
but is there a solution to fix this warning?
http://code.eligrey.com/l10n.js/demo.html#en-CA says, "You are viewing a Canadian English localisation of this page."
Canadian English generally uses the "-ize" suffix instead of the British "-ise" suffix.
SCOWL (as of version 7.1) lists "localization" (but not "localisation") in the Canadian dictionary.
See also http://en.wikipedia.org/wiki/Canadian_English#cite_ref-12 for more information.
I am getting an error when calling some jQuery ajax functions that have strings in the data object eg:
$.ajax({
data: { ..strings... }
...
Here is the top of the trace:
Uncaught TypeError: Cannot call method 'valueOf' of undefined l10n.js:148
String_ctr.(anonymous function) l10n.js:148
add jquery-1.10.2.js:7499
buildParams jquery-1.10.2.js:7551
buildParams jquery-1.10.2.js:7546
jQuery.param jquery-1.10.2.js:7519
jQuery.extend.ajax ...
When I print my data object that I am sending into the above ajax function it looks something like:
f: "..."
limit: 4
page: 0
o: Object
{
0: "1"
toLocaleString: function () {
__proto__: Object
}
On these strings I do not want to do translation, so I make a small change into l10n.js at line 143:
if(this === undefined) return false;
This stops the error, and translation seems to be fine for everything else, but is there a better way?
I noticed in the Usage instructions you stated to:
Place <script type="text/javascript" src="path/to/l10n.js"></script>
anywhere after the <link>
tag.
I presume the link
tags is referencing the localization .json
file?
However I noticed in the demo you stored your localization in a .js
file and included it after the library.
What is the difference?
Just starting to use this library and wondering for like the default language or similar ones do you need to provide the translation if one is not needed?
For example, say your translation is l("my message")
then you would normally have to do something like this:
{
"en-US": {
"my message": "my message",
"color": "color"
},
"en-GB": {
"my message": "my message",
"color": "colour"
},
}
Whereas, if not already an acceptable way to do it, something like this would save a lot of repeated data and code bloat:
{
"en-US": {
},
"en-GB": {
"color": "colour"
},
}
So basically if it didn't find the translation then the text would remain the same; in this instance we would be using en-US
as our default (writing) language and hence no translations are needed and en-GB
is very similar so the file should only need to contain the translations that actually need to be translated.
Is this an acceptable way of doing it or does all translations have to be put in the files whether they need translating or not?
http://code.eligrey.com/l10n.js/demo.html#ja
that page says: Your locale is unsupported.
But the commit history suggests it should say otherwise...
Just wondering what if you wanted to do translation on a string that has a number in it?
For example:
There (is,are) {n} cat(s)
So what it would do is find the translation string to translate the words, choose the correct term between is and are, show the locale specific number based on what number you passed in (somehow) and also display either the non-plural or plural version of the word cat.
...or is this outside this library's scope?
Thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.