Link Search Menu Expand Document

Internationalization

Table of contents


Challenge faced when a website or api service dealing with multiple language is to maintain the overall performance. To archive that expectations, multiple language in puko divided into 2 main concern: frontend and backend. The very first step to determinate what language to use is client HTTP request. HTTP Request can vary from web browser, native mobile apps or desktop applications.

So when requesting resource to server, you can pass custom X_LANG header with value of 2 digits lowercase based country code as language code. if the custom header don’t exist puko will use default value ‘id’.

In the code level, we can achieve it 2 step. First we will deal with frontend html file. Separated html language is use to maintaining performance. With cost became redundant.

You can crate the html file like shown below:

assets
   html
      en
         function
            template.html
      id
         function
            template.html

you can add another language code by yourself like cn, kr, jp and so on.


In the backend side, language maintained directly from controller with function called say(). For example:

throw new Exception($this->say('NOT_FOUND'));

say called with $this because the functions inherited from controller.

The ‘NOT_FOUND’ key you noticed is stored in json file in assets/master/id.master.json by default. You can also add new json file with language code as you wish en.master.json, `cn.master.json’ so on.

You can also pass a custom string into variable with second parameter of say

throw new Exception($this->say('WRONG_ADDR', [$username, $email]));

Place %s in the json file to retreive the custom value:

{
    "NOT_FOUND": "No data found",
    "WRONG_ADDR": "Address for %s not found with email: %s"
}

Now language resources can be translated and centralized.