Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get device Locale or Language with PhoneGap Build?

I'm using Phonegap Build to develop an application for iOS and Android.

I'd like to determine the locale (e.g. 'en-US') for the device, though I'd settle for the current language setting, or even the app store my app was installed from (it's been a long day).

Following the instructions here for the Globalization plugin I think I have everything right, but nothing seems to work on either the iPhone 6 or Samsung Galaxy Nexus I'm using for testing.

The relevant part of my config.xml looks like this:

<gap:plugin name="org.apache.cordova.globalization" />

My function for getting locale from the plugin looks like this:

var getPhoneGapLocaleName = function() {
    var loc = 'unknown';

    if (navigator.globalization !== undefined) {
        navigator.globalization.getLocaleName(
            function (locale) {
                if (locale !== undefined) {
                        loc = locale.value;
                }
            },
            function () {
                // nothing
            }
        );
    }

    return loc;
};

Note: on both devices navigator.globalization.getLocaleName is present and appears correct, evaluating to a function resembling what I'd expect based on the documentation.

like image 658
Adam Avatar asked Dec 10 '25 10:12

Adam


1 Answers

The problem here was that the variable 'loc' was declared outside the scope of the success or failure callbacks, which of course happen after a few brief moments.

I fixed this by changing the function thus:

var refreshPhoneGapLocaleName = function() {
    if (navigator.globalization !== undefined) {
        navigator.globalization.getLocaleName(
            function (locale) {
                if (locale !== undefined) {
                    localStorage['pg.locale'] = locale.value;
                }
            },
            function () {
                // nothing
            }
        );
    }
};

Now calling it in onDeviceReady in order to refresh the values when the app starts.

A few moments later (not immediately) the following function can be used to retrieve the locale value:

var getLocale = function() {
    return localStorage['pg.locale']();
};

The greatest thing about StackOverflow is how often it helps one to resolve one's own silly mistakes. :)

like image 110
Adam Avatar answered Dec 13 '25 01:12

Adam



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!