Open rhasan516 opened 9 years ago
Yes, I see this too, intermittently. I think this is a knock-on from the fix for #48 and #52 made back in February which made loading of the properties files asynchronous at all times.
A workaround for now would be to set gAsyncResourceLoading to false to load the files synchronously. You'll get a "Synchronous XMLHttpRequest" warning in Chrome, but it's only a temporary measure until there's a fix for this.
Thanks :) my team member told me this workaround works for now.
SIlly me. On second thoughts, this isn't a bug.
Please see the comment above gAsyncResourceLoading
in the source (which I didn't read before):
Synchronously loading l10n resources significantly minimizes flickering from displaying the app with non-localized strings and then updating the strings. Although this will block all script execution on this page, we expect that the l10n resources are available locally on flash-storage.
As synchronous XHR is generally considered as a bad idea, we're still loading l10n resources asynchronously -- but we keep this in a setting, just in case... and applications using this library should hide their content until the `localized' event happens.
So, start your application inside of an event handler for 'localized'. In my case, I have a Backbone application using require.js, so I start my application like so:
document.addEventListener('localized', function () {
require(["app"], function (app) {
Backbone.history.start();
});
});
Use .ready
instead of the event. This ensures that the callback is called even if the event has already been triggered.
document.webL10n.ready(function() {
require(['app'], function (app) { Backbone.history.start(); });
});
Thanks Rob. That means this also works (which I prefer, as require is pretty fundamental to the operation of the application!)
require(["app"], function (app) {
document.webL10n.ready(function () { //wait until l10n has finished loading resources
Backbone.history.start();
});
});
Hmm, I thought webL10n.ready() was working, but it seems not - I'm still seeing the "undefined" warnings from time to time. I've reverted to using the localized event.
@paulguz I've submitted a patch for your issue, could you check whether it solves your problem, and report back?
@Rob--W Yes, that does seem to have made a difference. However, it only works if I put my require statement inside the ready() call; if I put the ready call inside the require(), I still see the warnings. So, this works:
document.webL10n.ready(function () { //wait until l10n has finished loading resources
require(["app"], function (app) {
Backbone.history.start();
});
});
But this doesn't:
require(["app"], function (app) {
document.webL10n.ready(function () { //wait until l10n has finished loading resources
Backbone.history.start();
});
});
Thanks.
@paulguz I have added another commit to #70, assuming that you're loading additional localization files using loadLocale
. If that does not solve your issue, could you share a minimal project that demonstrates your problem?
Hello again, after a whole year. I've been sidetracked in that time, but found myself looking at this again recently after upgrading dependencies in my project.
It appears that the last commit by @Rob--W has reintroduced the console warnings.
For the record, I'm not using loadLocale
.
Unfortunately I'm too busy right now to put together a sample project.
Hi, as part of porting Loqui (which uses this library) we are seeing a lot of undefined warning logs according to the following code:
It looks like load and parse l10n data is happening AFTER the warning is printed (set breakpoints, above code executes first before the loading is complete). The code in index.html is:
However others are working:
Thanks for your help.