Setting up multi-language support is a good way to attract the new users to your website but there is no direct way to implement it to the website.
You need to write extra code and update existing hardcoded text content to enable multiple languages.
For maintaining this you can either create separate files or use MySQL table.
In this tutorial, I will create simple examples to show multi-language support on the website.
Contents
1. Define constant
Create a separate PHP file for languages e.g. lang_en.php, lang_pl.php, etc. and define constants variable in it.
Include the file according to language selection and use the constant variables in the place of string text on the web page.
Example
Create two lang_en.php and lang_pl.php files. The lang_en.php to store english value and lang_pl.php for Polish.
lang_en.php
<?php
define("_REGISTER", "Register");
define("_NAME", "Name");
define("_USERNAME", "Username");
define("_EMAIL", "Email");
define("_ADDRESS", "Address");
define("_SUBMIT", "Submit");
lang_pl.php
<?php
define("_REGISTER", "Zarejestrować");
define("_NAME", "Nazwa");
define("_USERNAME", "Nazwa Użytkownika");
define("_EMAIL", "E-mail");
define("_ADDRESS", "Adres");
define("_SUBMIT", "Zatwierdź");
Add <meta > tag to set charset to utf8.
Create a <select > element with language options and create a <form> where use constant variables. Submit the language form when the option is selected from the <select> element.
Initialize $_SESSION['lang'] with submitted language value and include a file.
index.php
<?php
session_start();
// Set Language variable
if(isset($_GET['lang']) && !empty($_GET['lang'])){
$_SESSION['lang'] = $_GET['lang'];
if(isset($_SESSION['lang']) && $_SESSION['lang'] != $_GET['lang']){
echo "<script type='text/javascript'> location.reload(); </script>";
}
}
// Include Language file
if(isset($_SESSION['lang'])){
include "lang_".$_SESSION['lang'].".php";
}else{
include "lang_en.php";
}
?>
<!doctype html>
<html>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<body >
<script>
function changeLang(){
document.getElementById('form_lang').submit();
}
</script>
<!-- Language -->
<form method='get' action='' id='form_lang' >
Select Language : <select name='lang' onchange='changeLang();' >
<option value='en' <?php if(isset($_SESSION['lang']) && $_SESSION['lang'] == 'en'){ echo "selected"; } ?> >English</option>
<option value='pl' <?php if(isset($_SESSION['lang']) && $_SESSION['lang'] == 'pl'){ echo "selected"; } ?> >Polish</option>
</select>
</form>
<!-- Form -->
<h1><?= _REGISTER ?></h1>
<form method='post' action=''>
<?= _NAME ?> : <input type='text' name='name' /><br>
<?= _USERNAME ?> : <input type='text' name='username' /><br>
<?= _EMAIL ?> : <input type='text' name='email' /><br>
<?= _ADDRESS ?> : <input type='text' name='address' /><br>
<input type='submit' value='<?= _SUBMIT ?>'>
</form>
</body>
</html>
2. MySQL
Create separate columns or MySQL table to handle multi-language.
In the example, I am creating a column to store English and Polish content.
posts Table
Set the table Collation to utf8_general_ci and also for the field which will store other language content e.g. title_pl, content_pl.
CREATE TABLE IF NOT EXISTS `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) CHARACTER SET latin1 NOT NULL, `title_pl` varchar(100) NOT NULL, `content` text CHARACTER SET latin1 NOT NULL, `content_pl` text NOT NULL, `link` varchar(255) CHARACTER SET latin1 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
config.php
<?php
session_start();
$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "tutorial"; /* Database name */
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
mysqli_set_charset( $con, 'utf8');
NOTE – Make sure to add
mysqli_set_charset( $connection-variable, 'utf8').
lang_en.php
<?php
define("_POSTS", "POSTS");
define("_MORE", "More");
lang_pl.php
<?php
define("_POSTS", "POSTS");
define("_MORE", "Jeszcze");
index.php
<?php
include "config.php";
// Set Language variable
if(isset($_GET['lang']) && !empty($_GET['lang'])){
$_SESSION['lang'] = $_GET['lang'];
if(isset($_SESSION['lang']) && $_SESSION['lang'] != $_GET['lang']){
echo "<script type='text/javascript'> location.reload(); </script>";
}
}
// Include Language file
if(isset($_SESSION['lang'])){
include "lang_".$_SESSION['lang'].".php";
}else{
include "lang_en.php";
}
?>
<!doctype html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<link href="style.css" type="text/css" rel="stylesheet">
</head>
<body >
<script>
function changeLang(){
document.getElementById('form_lang').submit();
}
</script>
<!-- Language -->
<form method='get' action='' id='form_lang' >
Select Language : <select name='lang' onchange='changeLang();' >
<option value='en' <?php if(isset($_SESSION['lang']) && $_SESSION['lang'] == 'en'){ echo "selected"; } ?> >English</option>
<option value='pl' <?php if(isset($_SESSION['lang']) && $_SESSION['lang'] == 'pl'){ echo "selected"; } ?> >Polish</option>
</select>
</form>
<!-- POST List -->
<h1><?= _POSTS ?></h1>
<div class="container">
<?php
$query = "select * from posts";
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)){
// Selection field
$title_field = "title";
$content_field = "content";
if(isset($_SESSION['lang']) && $_SESSION['lang'] == 'pl'){
$title_field = "title_pl";
$content_field = "content_pl";
}
$id = $row['id'];
$title = $row[$title_field];
$content = $row[$content_field];
$shortcontent = substr($content, 0, 160)."...";
$link = $row['link'];
?>
<!-- Post -->
<div class="post" id="post_<?php echo $id; ?>">
<h1><?php echo $title; ?></h1>
<p>
<?php echo $shortcontent; ?>
</p>
<a href="<?php echo $link; ?>" class="more" target="_blank"><?= _MORE ?></a>
</div>
<?php
}
?>
</div>
</body>
</html>
3. Conclusion
Set your web page charset to utf8 using <meta > tag and while storing multi-language to the MySQL database table set its Collation to utf8_general_ci.

What about if I want to make language rtl such as arabic with English ??? Please answer me
include a css file with direction:rtl
Thanks Yogesh!
how to add in website?
didn’t understand your code 🙁
If you have a big website with o huge number of elements to be translated [say more than 2000] what method is recommended [from the efficiency stand point]: language files or database?
When trying to press the button to change the language, it does not go down until I try more than once with what is the solution
Enjoyed your article. I have a site offering 46
languages called songswell.com. I am looking to perhaps adapt some of your methods. I think you are relying on the $_GET code. What your method accomplishes is having the URL show the language. Whereas my coding changes the language but not the URL. But i believe one then has to copy every language php onto every page of your website.
Hello YOGESH, Thanks for reply. What made me read your article closely was your coding let the language choice show in the URL or query string. On my website songswell.com my language menu changes the page language yet the chosen language does not show in the URL. I was trying to figure out how to add code to my site to make this possible. best joe