la meilleure façon de rendre le site web codeigniter multilingue. l'appel des tableaux lang dépend de la session lang?

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

J'ai un site Web de base codeigniter en anglais et je dois ajouter une langue polonaise maintenant. 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 dépend de la Session de la sélection de lang? Je ne veux pas utiliser la base de données.

Apprécier aide! Je suis à cours d' date limite :/ merci!!

78
demandé sur designer-trying-coding 2009-08-25 17:52:51

11 réponses

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

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

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

Les fichiers de langue sont généralement stockées dans votre système/répertoire de langue. Alternativement vous pouvez créer un dossier appelé langue dans votre dossier d'application et magasin là-bas. CodeIgniter regardera en premier dans votre répertoire application / Langue. Si le répertoire n'existe pas ou si langue spécifiée ne se trouve pas là CI regardera plutôt 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 de application/language/polish
  • ensuite, créez vos clés dans ce fichier (par exemple $lang['hello'] = "Witaj";
  • ensuite, chargez-le dans votre contrôleur comme $this->lang->load('polish_lang', 'polish');
  • ensuite, récupérez la ligne comme $this->lang->line('hello'); stockez simplement la valeur de retour de cette fonction dans une variable afin que vous puissiez l'utiliser dans votre vue.

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

90
répondu Randell 2014-03-13 10:50:35

Aussi pour ajouter la langue à la session, je définirais quelques constantes pour chaque langue, puis assurez-vous que la bibliothèque de session est chargée automatiquement dans config/autoload.php, ou vous le chargez quand vous en avez besoin. Ajouter 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');
22
répondu Matthew Rapati 2009-08-25 16:34:43

Dans le contrôleur ajouter les lignes suivantes lorsque vous faites le cunstructor

C'est-à-dire, après

Parent:: Controller ();

Ajouter au-dessous des lignes

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

Créer un fichier d'aide lang_translate_helper.php avec la fonction suivante et le mettre dans le répertoire system \ application \ helpers

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

Pour chaque langue, créez un répertoire avec une abréviation de langue comme en, nl, fr, etc., selon système\application\langues

Créer un fichier de langue ci-dessus (respectif) répertoire 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 la même langue avec différemment selon l'exigence par exemple, si vous voulez un fichier de langue séparé pour la gestion du backend (section administrateur), vous pouvez l'utiliser dans controller comme $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 langue souhaitée, étiquettes d'accès comme ci-dessous dans view

Label('bienvenue', $this);

Ou

Label ('Hello word', $this);

Notez l'espace dans bonjour, word vous pouvez l'utiliser comme de cette façon :)

Lorsqu'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.

7
répondu YoGo 2010-12-28 10:00:21

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 le ipinfodb.com api vous pouvez ajouter le ip2locationlite.classe.fichier php dans votre dossier de bibliothèque d'applications codeigniter, puis créez une fonction de modèle pour faire toute logique geoip dont vous avez besoin pour votre application, comme comme:

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;
}
1
répondu Ben Mullikin 2011-04-13 21:31:38

Pour une utilisation plus facile, CI a mis à jour ceci afin que vous puissiez simplement utiliser

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

Et de traduire le texte

lang('language line');

Et si vous voulez le déformer à l'intérieur de l'étiquette, utilisez le paramètre optionnel

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

Cela affichera

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

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

1
répondu Samy Massoud 2013-09-10 09:32:34

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é String qui vous permet de garder une trace de vos fichiers de langue facilement, et de collaborer avec les traducteurs.

Vous pouvez importer des fichiers de langue existants (dans PHP array, PHP Define, ini, po ou .formats de chaînes) ou créez vos propres sections à partir de zéro et ajoutez du contenu directement via le système.

La chaîne est totalement gratuit, alors vérifiez-le et dites-nous ce que vous en pensez.

Il est en fait construit sur Codeigniter aussi! Consultez la version bêta à http://mygengo.com/string

0
répondu user151516 2009-11-30 23:16:32

J'ai utilisé la classe My_language de Wiredesignz avec beaucoup de succès.

Je viens de le publier sur github, car je n'arrive à en trouver aucune trace nulle part.

Https://github.com/meigwilym/CI_Language

Mes seules modifications sont de renommer la classe en CI_Lang, conformément aux nouvelles modifications de v2.

0
répondu Mei 2013-09-10 13:12:30
0
répondu Justis Matotoka 2013-10-24 10:15:12

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 mechanizm interne de CI

O, presque oublier! dans les vues, j'utilise des boutons, qui seting cookie 'langue' avec la langue, préféré par l'utilisateur.

Donc, d'abord ce code essaie de détecter le "langage préféré" défini dans le useragent de l'utilisateur (navigateur). Ensuite, le code essaie de lire le cookie 'language'. Et enfin-Switch définit la langue pour CI-application

0
répondu Dmitry Khartsy 2017-01-08 08:55:39

Vous pouvez créer une fonction comme celle-ci

function translateTo($language, $word) {  
   define('defaultLang','english');  
   if (isset($lang[$language][$word]) == FALSE)  
      return $lang[$language][$word];  
   else  
      return $lang[defaultLang][$word];  
}
-1
répondu thanhquanky 2012-12-24 16:37:06

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

1. Ajouter des fichiers de langue dans le dossier application / langue / arabe (j'ajoute Lang arabe en sma2 intégré ci)

2. Aller dans le fichier nommé setting.php dans application/modules/configuration/vues/réglage.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. Il a bien fonctionné.

-1
répondu snakehead 2014-05-24 02:51:45