82 votes

la meilleure façon de rendre le site Web de codeigniter multilingue. appeler à partir de tableaux dépend de la session de langue?

Je suis à la recherche des heures et des heures, mais je ne pouvais pas trouver un clair, moyen efficace de faire ça :/

J'ai un codeigniter site web de base en anglais et j'ai du ajouter une langue polonaise maintenant. Quel est le meilleur moyen de faire mon site en 2 langues en fonction des visiteurs de sélection?

est-il possible de créer une matrice de fichiers pour chaque langue et de les appeler dans les fichiers de vue dépend de la Session de lang sélection? Je ne veux pas utiliser de base de données.

Apprécier l'aide! Je suis en cours d'exécution hors du délai :/ merci!!

95voto

Randell Points 2679

Avez-vous vu CodeIgniter est la Langue de la bibliothèque?

La Classe de Langue fournit des fonctions pour récupérer des fichiers de langue et de lignes de texte pour les fins de l'internationalisation.

Dans votre CodeIgniter système de dossier que vous aurez trouver un appelé langage contenant des ensembles de des fichiers de langue. Vous pouvez créer votre propres fichiers de langue nécessaires à pour afficher d'erreur et autres messages dans d'autres langues.

Les fichiers de langue sont généralement stockés dans votre système/répertoire de langue. Alternativement vous pouvez créer un dossier appelé langue à l'intérieur de votre dossier de l'application et de les stocker . CodeIgniter va d'abord regarder dans votre application/répertoire de langue. Si le répertoire n'existe pas ou que l' langue spécifiée ne se trouve pas là CI va plutôt chercher dans votre global système/dossier de langue.

Dans votre cas...

  • vous devez créer un polish_lang.php et english_lang.php à l'intérieur d' application/language/polish
  • ensuite créer vos clés à l'intérieur de ce fichier (par exemple, $lang['hello'] = "Witaj";
  • puis la charger dans le contrôleur comme $this->lang->load('polish_lang', 'polish');
  • ensuite, récupérez la ligne comme celle - $this->lang->line('hello'); Seulement de stocker la valeur de retour de cette fonction dans une variable de sorte que vous pouvez l'utiliser dans votre point de vue.

Répétez les étapes pour l'anglais et toutes les autres langues dont vous avez besoin.

22voto

Matthew Rapati Points 3973

De plus, pour ajouter la langue à la session, je définirais des constantes pour chaque langue, puis je m'assurerais que la bibliothèque de session est automatiquement chargée dans le fichier config / autoload.php, ou vous la chargez à tout moment. Ajoutez la langue souhaitée par l'utilisateur à la session:

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

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

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

7voto

YoGo Points 39

Dans le contrôleur, ajouter les lignes suivantes lorsque vous faites de l'cunstructor

j'.e, après

parent::Controller();

ajouter les lignes ci-dessous

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

créer un fichier de helper lang_translate_helper.php avec la fonction suivante et de le mettre dans le répertoire system\application\aides

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

pour chaque langue, de créer un répertoire à la langue abbrevation comme fr, nl, fr, etc., en vertu de système\application\langues

créer le fichier de langue ci-dessus (respectifs) répertoire qui contiendra tableau $lang holding 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 des fichiers multiples pour la même langue différemment que par l'exigence e.g, si vous voulez séparer la langue de fichier pour la gestion de backend (section administrateur) vous pouvez l'utiliser dans le contrôleur de $this->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 souhaitée, l'accès des étiquettes comme ci-dessous en vue

label('bienvenue', $this);

OU

label('hello word', $this);

remarque l'espace dans bonjour, word vous pouvez l'utiliser comme ça :)

whene il n'y a pas d'étiquette définie dans le fichier de langue, il sera tout simplement l'imprimer ce que vous avez passé à la fonction de l'étiquette.

1voto

Ben Mullikin Points 23

Je seconde Randell réponse.

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

Si vous souhaitez utiliser la ipinfodb.com api, Vous pouvez ajouter le ip2locationlite.class.php fichier sur votre codeigniter demande de dossier de la bibliothèque, puis de créer une fonction de modèle pour faire ce que geoip logique dont vous avez besoin pour votre application, tels que:

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;
}

1voto

SamyMassoud Points 1124

Pour une utilisation plus facile CI ont mis à jour ce de sorte que vous pouvez simplement utiliser

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

et pour traduire un texte

lang('language line');

et si vous voulez de la courbure à l'intérieur de l'étiquette d'utilisation paramètre facultatif

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

Ce sera de sortie

// becomes <label for="form_item_id">language_key</label>

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X