le meilleur moyen de faire du site web de codeigniter multi-langue. l’appel des tableaux lang dépend de la session lang?

Je recherche des heures et des heures, mais je n’ai pas trouvé de moyen clair et efficace de le faire: /

J’ai un site Web de base de codification en anglais et je dois maintenant append une langue polonaise. Quelle est la meilleure façon de rendre mon site en 2 langues en fonction de la sélection des visiteurs?

existe-t-il un moyen de créer des fichiers de tableau pour chaque langue et de les appeler dans les fichiers de vue en fonction de la sélection de la session à partir du langage? Je ne veux pas utiliser de firebase database.

Apprécie les aides! Je suis à court de délai: / merci !!

Avez-vous vu la bibliothèque de langue de CodeIgniter ?

La classe de langue fournit des fonctions permettant de récupérer des fichiers de langue et des lignes de texte à des fins d’internationalisation.

Dans votre dossier système CodeIgniter, vous trouverez un langage appelé contenant des ensembles de fichiers de langue. Vous pouvez créer vos propres fichiers de langue pour afficher les messages d’erreur et autres dans d’autres langues.

Les fichiers de langue sont généralement stockés dans votre répertoire système / langue. Alternativement, vous pouvez créer un dossier appelé langue à l’intérieur de votre dossier d’application et les y stocker. CodeIgniter recherchera d’abord votre application / répertoire de langue. Si le répertoire n’existe pas ou si la langue spécifiée n’est pas localisée, CI examinera plutôt votre dossier système / langue global.

Dans ton cas…

  • vous devez créer un polish_lang.php et english_lang.php dans l’ application/language/polish
  • puis créez vos clés dans ce fichier (par exemple $lang['hello'] = "Witaj";
  • puis chargez-le dans votre contrôleur comme $this->lang->load('polish_lang', 'polish');
  • puis chercher la ligne comme $this->lang->line('hello'); Stockez simplement la valeur de retour de cette fonction dans une variable afin de pouvoir l’utiliser dans votre vue.

Répétez les étapes pour la langue anglaise et toutes les autres langues dont vous avez besoin.

Aussi, pour append la langue à la session, je définirais des constantes pour chaque langue, puis assurez-vous que la bibliothèque de sessions est automatiquement chargée dans config / autoload.php, ou vous la chargez quand vous en avez besoin. Ajoutez la langue souhaitée par les utilisateurs à la session:

 $this->session->set_userdata('language', ENGLISH); 

Ensuite, vous pouvez le saisir à tout moment comme ceci:

 $language = $this->session->userdata('language'); 

Dans le contrôleur append des lignes suivantes lorsque vous faites le modèle

c’est à dire après

parent :: Controller ();

append les lignes ci-dessous

  $this->load->helper('lang_translate'); $this->lang->load('nl_site', 'nl'); // ('filename', 'directory') 

créer le fichier d’aide lang_translate_helper.php avec la fonction suivante et le placer dans le répertoire \ application \ helpers

 function label($label, $obj) { $return = $obj->lang->line($label); if($return) echo $return; else echo $label; } 

pour chacun des langages, créer un répertoire avec une abréviation de langue comme en, nl, fr, etc., sous system \ application \ languages

créer un fichier de langue dans le répertoire ci-dessus (respectif) qui contiendra le tableau $ lang contenant les paires label => language_value comme indiqué ci-dessous

nl_site_lang.php

 $lang['welcome'] = 'Welkom'; $lang['hello word'] = 'worde Witaj'; 

en_site_lang.php

 $lang['welcome'] = 'Welcome'; $lang['hello word'] = 'Hello Word'; 

vous pouvez stocker plusieurs fichiers pour une même langue avec des exigences différentes, par exemple, si vous voulez un fichier de langue séparé pour la gestion du backend (section administrateur), vous pouvez l’utiliser dans $ as-> lang-> load (‘nl_admin’, ‘ nl ‘);

nl_admin_lang.php

 $lang['welcome'] = 'Welkom'; $lang['hello word'] = 'worde Witaj'; 

et enfin pour imprimer l’étiquette dans la langue désirée, accéder aux étiquettes comme ci-dessous en vue

étiquette (‘bienvenue’, $ this);

OU

label (‘Bonjour mot’, $ this);

Notez l’espace dans Bonjour et mot, vous pouvez l’utiliser comme ça aussi 🙂

Quand il n’y a pas de lable défini dans le fichier de langue, il imprimera simplement ce que vous avez passé à l’étiquette de la fonction.

J’appuie la réponse de Randell.

Cependant, on pourrait toujours intégrer un GeoIP tel que http://www.maxmind.com/app/php ou http://www.ipinfodb.com/ . Ensuite, vous pouvez enregistrer les résultats avec la classe de session codeigniter.

Si vous souhaitez utiliser l’api ipinfodb.com Vous pouvez append le fichier ip2locationlite.class.php à votre dossier de bibliothèque d’application de codeigniter, puis créer une fonction de modèle pour effectuer la logique de géoip dont vous avez besoin pour votre application, par exemple:

 function geolocate() { $ipinfodb = new ipinfodb; $ipinfodb->setKey('API KEY'); //Get errors and locations $locations = $ipinfodb->getGeoLocation($this->input->ip_address()); $errors = $ipinfodb->getError(); //Set geolocation cookie if(empty($errors)) { foreach ($locations as $field => $val): if($field === 'CountryCode') { $place = $val; } endforeach; } return $place; } 

Pour une utilisation plus facile, CI a mis à jour ce que vous pouvez juste utiliser

 $this->load->helper('language'); 

et traduire du texte

 lang('language line'); 

et si vous voulez le déformer à l’intérieur de l’étiquette, utilisez le paramètre facultatif

 lang('language line', 'element id'); 

Cela va sortir

 // becomes  

Pour une bonne lecture http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html

Lors de la gestion des fichiers réels, les choses peuvent se désynchroniser assez facilement, sauf si vous êtes vraiment vigilant. Nous avons donc lancé un service gratuit (bêta) appelé Ssortingng, qui vous permet de suivre facilement vos fichiers de langue et de collaborer avec les traducteurs.

Vous pouvez importer des fichiers de langue existants (dans un tableau PHP, PHP Define, ini, po ou .ssortingngs) ou créer vos propres sections à partir de zéro et append du contenu directement via le système.

Ssortingng est totalement gratuit, alors s’il vous plaît, jetez-y un coup d’œil et dites-nous ce que vous en pensez.

Il est en fait construit sur Codeigniter aussi! Découvrez la version bêta à l’ adresse http://mygengo.com/ssortingng

J’ai utilisé avec succès la classe MY_Language de Wiredesignz.

Je viens de le publier sur github, car je n’arrive pas à en trouver une trace nulle part.

https://github.com/meigwilym/CI_Language

Mes seuls changements consistent à renommer la classe en CI_Lang, conformément aux nouvelles modifications apscopes à v2.

Suivez cette https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n

c’est simple et clair, consultez également le document @ http://ellislab.com/codeigniter/user-guide/libraries/language.html

sa façon plus simple que

J’utilise un tel code dans config.php:

 $lang = 'ru'; // this language will be used if there is no any lang information from useragent (for example, from command line, wget, etc... if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); $tmp_value = $_COOKIE['language']; if (!empty($tmp_value)) $lang = $tmp_value; switch ($lang) { case 'ru': $config['language'] = 'russian'; setlocale(LC_ALL,'ru_RU.UTF-8'); break; case 'uk': $config['language'] = 'ukrainian'; setlocale(LC_ALL,'uk_UA.UTF-8'); break; case 'foo': $config['language'] = 'foo'; setlocale(LC_ALL,'foo_FOO.UTF-8'); break; default: $config['language'] = 'english'; setlocale(LC_ALL,'en_US.UTF-8'); break; } 

…. et puis j’utilise habituellement le mécanisme interne de CI

o, presque oublier! dans les vues i en utilisant des boutons, ce qui définit la langue de cookie avec la langue, préféré par l’utilisateur.

Donc, tout d’abord, ce code tente de détecter le “langage preffered” défini dans le useragent de l’utilisateur (navigateur). Ensuite, le code essaie de lire le «langage» des cookies. Et enfin – commutateur définit la langue pour l’application CI

vous pouvez faire une fonction comme ça

 function translateTo($language, $word) { define('defaultLang','english'); if (isset($lang[$language][$word]) == FALSE) return $lang[$language][$word]; else return $lang[defaultLang][$word]; } 

Ami, ne vous inquiétez pas, si vous avez une application installée dans votre code et que vous voulez append un pack de langue, suivez ces étapes:

1. Ajouter des fichiers de langue dans le dossier application / langue / arabe (j’ajoute l’arabe dans sma2 construit en ci)

2. Allez dans le fichier nommé setting.php dans application / modules / settings / views / setting.php . Ici vous trouvez le tableau

 < ?php /* $lang = array ( 'english' => 'English', 'arabic' => 'Arabic', // i add this here 'spanish' => 'Español' 

Maintenant, enregistrez et exécutez l’application. Ça a bien marché