4

I want to localize my webapp. Since localization through javascript only is not recommended I thought using php would be an alternative.

So with php I read a messages.json file that stores all localization data.

$json = file_get_contents("_locales/en/messages.json");

In the header of my webapp I generate some javascript with php according to the user's browser language.

echo "var localeObj = " . $json . ";";

So this is just a var that holds all data from the messages.json file that looks like that

{
    "extTitle": {
        "message": "Test1"
    },
    "extName":{
        "message": "Test2"
    }
}

Now I want to be able to access each item from the json like

var title = getItem("extTitle");

and it returns Test1. Any idea how to do that?

I am not very familar with json but if I just alert the localeObj it gives me just [object Object].

0

4 Answers 4

4
var getItem = function(item) {
   return localObj[item].message;
};

You could always encapsulate your i18n strings too...

(function() {

   var localObj = { ... };

   window.getItem = function(item) {
       return localObj[item].message;
   };

})();

This way, no other variables can possibly clobber your localObj.

Sign up to request clarification or add additional context in comments.

4 Comments

I get an missing ; before statement window.getItem(item) { }
should be localObj a string? Because it's coming as a string from the php method
@ArtWorkAD No, it shouldn't be. If it is, you'll need to parse it to JSON.
@ArtWorkAD Did you copy the code as is? JavaScript has ASI, so it shouldn't be that (unless you have an IDE complaining). Are you running this code in PHP?
1

You use array syntax [], or dot syntax ., to access javascript object properties.

Example:

localeObj["extTitle"];
localeObj.extTitle;

I would recommend reading something like this to get more familier with JSON.

Comments

1

You can initialize javascript variable like this.

var json = eval(<? echo $json ?>);   
alert(json.extTitle.message+ '  '+json.extName.message);

2 Comments

Thanks a lot for this last submission cause it allow me to place my markers on a Google map. very efficient.
do you have any hint how to do the same task but from coffeescript?
0

Inside messages.php:

<?php
header('Content-type:application/javascript');
$messages = array(
 "yes"=>"hai",
 "no"=>"iie"
);
$messages = json_encode($messages);
echo "window.messages = $messages";
?>

Inside index.html:

<html>
 <body>
 <script type="text/javascript" src="messages.php"></script>
 <script type="text/javascript">
  console.log(window.messages)
 </script>
 </body>
</html>

As long as you tell the browser to interpret the php file as a javascript file, you can echo anything you want.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.