login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Overige scripts > Automatisch Talen Systeem

Automatisch Talen Systeem

Auteur: Rik - 04 augustus 2006 - 11:57 - Gekeurd door: Gerard - Hits: 7808 - Aantal punten: 3.60 (5 stemmen)





Dit automatische talen systeem heeft de volgende functies:
- Talen van de bezoekers browser achterhalen
- De bezoeker zelf een taal laten kiezen
- De keuze van de bezoeker opslaan in een cookie
- Automatisch taalbestanden zoeken
- Taalbestanden includen

Een korte uitleg hoe het werkt:
- Eerst word er een array gemaakt met taalbestanden
- Structuur van de taalmap
[Languages] -> lang.all.php
-> [*1]
-> lang.*2.php
*1 is steeds een taal, bijvoorbeeld 'en', 'nl', 'de'
*2 is de naam van het taalbestand, die mag je zelf verzinnen
- De talen worden uit $_SERVER['HTTP_ACCEPT_LANGUAGE'] gefilterd
Daarbij word gelet op:
- Streken waar de taal wordt gesproken, bijvoorbeeld 'fr-be' (frans in belgië), worden weggelaten
- Dubbele talen worden weggelaten, bijvoorbeeld 'en' en 'en-us'
- Er word een taal voor de pagina uitgezocht
- Eerst word gecontroleerd of er een nieuwe taal is opgegeven
- Dan of er nog een taal in het cookie staat
- Daarna word gekeken of de taal van de bezoeker beschikbaar is
- Anders wordt de standaard taal gebruikt
- De taal balk word gemaakt
Ook is er een functie die je eenvoudig taalbestanden laat includen:
- Eerst probeert hij het bestand met de taal van de pagina te includen
- Als die niet bestaat word er gezocht in de array met talen uit $_SERVER['HTTP_ACCEPT_LANGUAGE']
- En anders wordt een bestand met de standaard taal geladen

De installatie:
- Pas de config naar jouw wensen aan
Als je kijkt wat er bij het voorbeeld is ingevuld denk ik dat er verder geen uitleg nodig is. ;)

Het gebruik:
- Include het bestand waar het script in staat. Als je het script laad vannuit een andere map dan waarin het staat is het nodig om voor het includen $config['path']['script'] in te stellen op de map van het script. Anders kunnen de taalbestanden niet goed worden geladen.
- Include taalbestanden met de functie 'include_lang_file()'
Maar hoe werken die taalbestanden?
In een taalbestand staan regels als "$lang['title'] = 'Welkom!';" daarvan kan je zoveel toevoegen als je er maar wilt, ook hier lijkt het voorbeeld als uitleg me genoeg...
- Laat tekst op de pagina zien! Bijvoorbeeld "echo $lang['title'];"

In de zip staat het script zoals je het zou kunnen gebruiken.

Code:
  1. <?php
  2. // Some config stuff :)
  3. $config['default_lang'] = 'nl';
  4. if (!isset($config['path']['script'])) {
  5. $config['path']['script'] = './';
  6. }
  7. $config['path']['lang'] = $config['path']['script'] . 'languages/';
  8. $config['path']['flags'] = $config['path']['script'] . 'images/flags/';
  9. $config['lang_save_time'] = 7 * 24 * 60 * 60; // A week
  10. $config['inc_alt_lang'] = true;
  11. $config['make_lang_bar'] = true;
  12.  
  13. // Initiate language var
  14. $GLOBALS['lang'] = array();
  15.  
  16. /* Search for language files */
  17. $lang_files = array(); // This array will hold the installed languages
  18.  
  19. // Open the language file directory
  20. $handle = opendir($config['path']['lang']);
  21.  
  22. // Loop over the files
  23. while (($file = readdir($handle)) !== false)
  24. {
  25. // Filter out non-files
  26. if ($file != '.' && $file != '..')
  27. {
  28. // Check if the 'file' is an valid language directory
  29. if (is_dir($config['path']['lang'] . $file) && ereg('^[a-z]{2}$', $file))
  30. {
  31. $lang_files[] = $file;
  32. }
  33. }
  34. }
  35.  
  36. /* Search for user selected languages */
  37. $user_langs = array(); // This array will hold the user selected languages
  38. if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
  39. {
  40. // The user has selected preferred languages, prepare them to read
  41. $accept_lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  42. $accept_lang = preg_replace('/(;q=[0-9]+\.[0-9]+)/i', '', $accept_lang);
  43. $accept_langs = explode(',', $accept_lang);
  44.  
  45. // Loop over the languages and add them to the array
  46. foreach ($accept_langs as $accept_lang)
  47. {
  48. // Remove potential countries
  49. $accept_lang = explode('-', $accept_lang);
  50. $user_langs[] = $accept_lang[0];
  51. }
  52. // Remove duplicate values from the array
  53. $user_langs = array_unique($user_langs);
  54. }
  55.  
  56.  
  57. /* Determine the language in which the page will be shown */
  58. // First check if the user selected a language to show the page
  59. if (isset($_GET['lang']))
  60. {
  61. $suggested_lang = $_GET['lang'];
  62. }
  63. // Check for a previously selected language
  64. elseif (isset($_COOKIE['lang']))
  65. {
  66. $suggested_lang = $_COOKIE['lang'];
  67. }
  68. // If a preferred language is selected check if that language file is available
  69. if (isset($suggested_lang) && !empty($suggested_lang) && in_array($suggested_lang, $lang_files))
  70. {
  71. $page['lang'] = $suggested_lang;
  72. // Save the preferred language in a cookie
  73. setcookie('lang', $suggested_lang, time() + $config['lang_save_time']);
  74. }
  75. else
  76. {
  77. /* None or invalid language preference is expressed, obtain a language automatically */
  78. // Select the first language which is available
  79. foreach ($user_langs as $user_lang)
  80. {
  81. if (in_array($user_lang, $lang_files))
  82. {
  83. $page['lang'] = $user_lang;
  84. // Stop searching
  85. break;
  86. }
  87. }
  88. if (empty($page['lang']))
  89. {
  90. // Still no language has been selected use the default one
  91. $page['lang'] = $config['default_lang'];
  92. }
  93. }
  94.  
  95. // Include some language files
  96. include_lang_file('all');
  97. include_lang_file('standard');
  98.  
  99.  
  100. // Make the language bar if enabled in the config
  101. if ($config['make_lang_bar'])
  102. {
  103. // These flags dont't have the same name as their language
  104. $flag_fix = array(
  105. 'en' => 'gb'
  106. );
  107.  
  108. // Start making the language bar
  109. $lang_bar = '';
  110. foreach ($lang_files as $lang_file)
  111. {
  112. if ($lang_file != $page['lang'])
  113. {
  114. // Fix some flags
  115. $flag = $lang_file;
  116. foreach ($flag_fix as $old => $new)
  117. {
  118. $flag = ereg_replace($old, $new, $lang_file);
  119. }
  120.  
  121. // The path to each flag
  122. $path = $config['path']['flags'] . $flag . '.gif';
  123.  
  124. // Add current language to the language bar
  125. $lang_bar .= '<a href="?lang=' . $lang_file . '" title="'. $lang[$lang_file] . '"><img src="' . $path . '" alt="' . $lang[$lang_file] . '" border="0" /></a>' . "\n";
  126. }
  127. }
  128. }
  129.  
  130. /* Include the given or an alternative language file */
  131. function include_lang_file($name)
  132. {
  133. if (!empty($name))
  134. {
  135. // Also make the config and page arrays available
  136. global $config, $page;
  137.  
  138. // Make the path to the language file
  139. $path = $config['path']['lang'];
  140. $path .= $name == 'all' ? 'lang.all.php' : $page['lang'] . '/lang.' . $name . '.php';
  141.  
  142. if (file_exists($path))
  143. {
  144. include $path;
  145. }
  146.  
  147. // Try to include another file if enabled in the config
  148. elseif ($name != 'all' && $config['inc_alt_lang'])
  149. {
  150. global $user_langs;
  151.  
  152. // Make the path to an alternative language file
  153. $alt_path = '';
  154.  
  155. // Select the first user language which is available
  156. foreach ($user_langs as $user_lang)
  157. {
  158. if (file_exists($config['path']['lang'] . $user_lang . '/lang.' . $name . '.php'))
  159. {
  160. $alt_path = $config['path']['lang'] . $user_lang . '/lang.' . $name . '.php';
  161. // Stop searching
  162. break;
  163. }
  164. }
  165. // If still no language has been found, use the default one
  166. if (empty($alt_path))
  167. {
  168. $alt_path = $config['path']['lang'] . $config['default_lang'] . '/lang.' . $name . '.php';
  169. }
  170. // Try to include the language file;
  171. if (file_exists($alt_path))
  172. {
  173. include $alt_path;
  174. }
  175. }
  176. }
  177.  
  178. // Make globally available
  179. return $GLOBALS['lang'] = array_merge($GLOBALS['lang'], $lang);
  180. }
Download code! Download code (.txt)

Download dit script!
 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (17)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.08s