Title: Multi Language Custom Theme Development
Last modified: April 8, 2022

---

# Multi Language Custom Theme Development

 *  [maryando](https://wordpress.org/support/users/maryando/)
 * (@maryando)
 * [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/)
 * Hi,
    I’m developing bilingual custom WP theme for the first time. This is simple
   theme without any backend customisation. However I don’t want to use any plugins
   to handle two language pages and I’m not sure if my approach is the simplest 
   one.
 * So, I’m planning to:
    1. Create two clone pages, one for each language as all
   the plugins do and translate them manually. 2. At every page add hard coded Language
   buttons so user can switch easily, and html hard coded tags as below: `<html 
   lang="en-GB">` `<html lang="pl-PL">` 3. All templates, headers or footers will
   be created also in two versions and pulled to the required template.
 * Because by default WordPress will tell the browser to expect the language which
   is set at the backend of our WordPress site, and because all the pages are in
   English by default that approach will certainly work and user will be ableto 
   navigate through the pages with any problems.
 * THE QUESTION IS:
    What if I would like user browser to determinate the displayed
   language? So, If user have Polish language set at their browser the Polish Home
   page will be loaded?
 * Is there any other way or function that can handle this without plugins?
    Also,
   plugins won’t work without Internationalization across all the pages, so this
   is pain for me. If there is any other better approach I would be glad to hear
   from you guys, what is your approach to this kind of sites?
 * Thanks so much and have a good day!
    -  This topic was modified 4 years, 2 months ago by [Jan Dembowski](https://wordpress.org/support/users/jdembowski/).
      Reason: Moved to Fixing WordPress, this is not an Developing with WordPress
      topic

Viewing 6 replies - 1 through 6 (of 6 total)

 *  Moderator [bcworkz](https://wordpress.org/support/users/bcworkz/)
 * (@bcworkz)
 * [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/#post-15540931)
 * There’s no single “best” approach. They each have their own advantages and drawbacks.
   More discussion at [https://wordpress.org/support/article/multilingual-wordpress/](https://wordpress.org/support/article/multilingual-wordpress/)
 * You can determine the preferred browser language from the request’s Accept-Language
   header. In WP, use the “locale” filter to set the WP UI to be any of the languages
   you’ve installed. As far as what post or page content to serve, that’d be up 
   to your theme’s coding. For example, your header.php template could dynamically
   output the correct html tag “lang” attribute value. If the locale has been properly
   set via filter, the `language_attributes()` function would do this for you.
 * Your content templates would then pull content in the appropriate language from
   where ever you decided to keep post or page translations.
 *  Thread Starter [maryando](https://wordpress.org/support/users/maryando/)
 * (@maryando)
 * [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/#post-15541148)
 * Hi, [@bcworkz](https://wordpress.org/support/users/bcworkz/) and thanks so much
   for taking your time and answering me.
    However I don’t think I get that fully.
 * I know that `language_attributes()` will output the correct language but it will
   only output the language we’ve set at the backend, so if English has been set
   at the backend it will result in `<html lang="en-GB">` and the same goes for 
   other language. I’m using this function for standard sites.
    This function will
   output correct html tag to the pages globally, so even to my Polish pages which
   is not what I would like to achieve, correct me if I’m wrong.
 * What I need is something like this probably.
 *     ```
       if (the user browser language is Polish) {
           grab slug 'home-pl';
       } else () {
           grab 'home'  
       }
       ```
   
 * Again I’m not sure if I explained this correctly. I don’t want to use plugins
   or multisite options, but like I have said I may not understand this fully. So
   hoping you can elaborate a bit more.
    Many thanks
 *  Moderator [bcworkz](https://wordpress.org/support/users/bcworkz/)
 * (@bcworkz)
 * [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/#post-15543228)
 * I had assumed that `locale` is utilized in the language attributes function. 
   It now looks like a faulty assumption. It may not even use a logged in user’s
   preferred language AFAICT. In any case, the “language_attributes” filter can 
   be used to cause it to return what ever you like. Or don’t use it at all and 
   create your own version to use on your header.php template.
 * You mentioned hard coding the relevant HTML. That’s not the way to go. You really
   would want to dynamically assign the right attribute based on the preferred language,
   whether by “language_attributes” or your own code.
 *  Thread Starter [maryando](https://wordpress.org/support/users/maryando/)
 * (@maryando)
 * [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/#post-15543286)
 * Yes, by hard coded I mean only this language element on the header, this way 
   I will be sure that the right attribute is assigned to the specific language.
   
   Using `language_attributes()` function WP will insert incorrect attribute globally,
   well the attribute will be right for some pages 🙂
 * But this lang attribute is not doing anything regarding the content. So it won’t
   choose a page in specific language and serve the user. This is only to tell the
   browser which language to expect.
 * I found interesting piece of code online which is redirecting to specific page
   accordingly to user browser language settings:
 *     ```
       $sites = array(
           "en" => "http://en.mysite.com/",
           "nl" => "http://nl.mysite.com/",
           "el" => "http://el.mysite.com/",
           "de" => "http://de.mysite.com/",
           );
   
       // Get 2 char lang code
       $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
       // Set default language if a '$lang' version of site is not available
       if (!isset($sites[$lang])) {
       $lang = ‘en’;
           }
       // Finally redirect to desired location
       header('Location: ' . $sites[$lang]);
       exit ;
       ```
   
 * so I can use it like this:
 *     ```
       $sites = array(
           "en" => "http://mysite.com/",
           "pl" => "http://mysite.com/pl/",
           );
   
       $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
       if (!isset($sites[$lang])) {
       $lang = ‘en’;
           }
       header('Location: ' . $sites[$lang]);
       exit ;
       ```
   
 * This function (if the browser language is Polish) will redirect to the polish
   version of the page otherwise it will go to English one.
    Which is exactly what
   I want.
 * Using above function user will land on PL or ENG version of the home page and
   from there I can create on both versions buttons, menus etc containing links 
   to other (PL or ENG) pages using `get_page()` function. So all should works seamlessly
   but the question is if this is the right approach.
 * If you can see any other option that would be great to hear.
    Thank you for your
   time. I really appreciate this!
    -  This reply was modified 4 years, 2 months ago by [maryando](https://wordpress.org/support/users/maryando/).
 *  Moderator [bcworkz](https://wordpress.org/support/users/bcworkz/)
 * (@bcworkz)
 * [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/#post-15544852)
 * If that works for you, it’s probably fine. Redirects are not optimal, but a non-
   redirect solution would likely require more coding. For example, instead of a
   redirect, the same page would query for content in the appropriate language.
 * It’d be nice for end users if there would be a way to manually choose one language
   or the other regardless of their browser preferences. Maybe a “no-redirect” URL
   query string that suppresses the browser language redirect.
 *  Thread Starter [maryando](https://wordpress.org/support/users/maryando/)
 * (@maryando)
 * [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/#post-15545350)
 * Thanks, yes I didn’t thought about that 🙁 The other way is the default way so
   the page will always be in English and user will be able to change the language
   using the switcher located in the header. This is not what I want, so I will 
   try to write something, but I’m not that good yet 🙁

Viewing 6 replies - 1 through 6 (of 6 total)

The topic ‘Multi Language Custom Theme Development’ is closed to new replies.

 * In: [Fixing WordPress](https://wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 6 replies
 * 2 participants
 * Last reply from: [maryando](https://wordpress.org/support/users/maryando/)
 * Last activity: [4 years, 2 months ago](https://wordpress.org/support/topic/multi-language-custom-theme-development/#post-15545350)
 * Status: not resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
