web-dev-qa-db-fra.com

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

Je cherche 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 de codeigniter en anglais et je dois maintenant ajouter une langue polonaise. Quelle est la meilleure façon de créer mon site en 2 langues en fonction de la sélection des visiteurs?

y at-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 sélection de session de langue? Je ne veux pas utiliser la base de données. 

Apprécier aide! Je suis à court de délai:/merci !!

78

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 texte à des fins d’internationalisation.

Dans votre dossier système CodeIgniter, vous aurez trouvez-en un appelé langage contenant des ensembles des fichiers de langue. Vous pouvez créer votre propres fichiers de langue selon les besoins, dans l’ordre afficher une erreur et d’autres messages dans 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é language dans votre dossier d’application et stocker Là-bas. CodeIgniter va regarder en premier dans votre répertoire application/language. Si le répertoire n'existe pas ou que le la langue spécifiée n’y est pas située CI va plutôt regarder dans votre global dossier système/langue.

Dans ton cas...

  • vous devez créer un polish_lang.php et un english_lang.php à l'intérieur de 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 récupérez la ligne comme $this->lang->line('hello'); Il suffit de stocker 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.

90
Randell

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 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');
22
Matthew Rapati

Dans le contrôleur, ajoutez les lignes suivantes lorsque vous créez le cunstructor

c'est-à-dire après

parent :: Controller ();

ajouter des lignes ci-dessous

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

crée le fichier d'aide lang_translate_helper.php avec la fonction suivante et le met 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 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 des 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, mais différemment selon l'exigence. Si vous souhaitez un fichier de langue distinct pour la gestion du backend (section administrateur), vous pouvez l'utiliser dans le contrôleur en tant que $ this-> lang-> load ',' nl ');

nl_admin_lang.php

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

et enfinpour imprimer l'étiquette dans la langue de votre choix, accédez aux étiquettes comme indiqué ci-dessous. 

label ('bienvenue', $ this);

OR

étiquette ('Bonjour Word', $ this); 

notez l’espace dans hello & Word, vous pouvez aussi l’utiliser de cette façon :) 

quand aucun fichier n’est défini dans le fichier de langue, il l’imprimera simplement ce que vous avez transmis à l’étiquette de la fonction.

7
YoGo

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/ . Vous pouvez ensuite enregistrer les résultats avec la classe de session codeigniter. 

Si vous souhaitez utiliser l'api ipinfodb.com Vous pouvez ajouter le fichier ip2locationlite.class.php à votre dossier de bibliothèque d'application Codeigniter, puis créer une fonction de modèle pour exécuter la logique de géolocalisation dont vous avez besoin pour votre application, telle 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;
}
1
Ben Mullikin

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

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

et traduire le 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 produira

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

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

1
Samy Massoud

Lorsque vous gérez les fichiers eux-mêmes, les choses peuvent se désynchroniser assez facilement, à moins que vous ne soyez vraiment vigilant. Nous avons donc lancé un service gratuit (bêta) appelé String qui vous permet de garder facilement trace de vos fichiers de langue et de collaborer avec des traducteurs. 

Vous pouvez importer des fichiers de langue existants (dans les tableaux PHP, PHP Définir, ini, po ou .strings) ou créer vos propres sections et ajouter du contenu directement via le système.

String est totalement gratuit, consultez-le et dites-nous ce que vous pensez.

Il est également basé sur Codeigniter! Découvrez la version bêta sur http://mygengo.com/string

0
user151516
0
Justis Matotoka

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 d'habitude des mécanismes internes de CI

o, presque oublier! dans les vues, j'utilise des boutons qui définissent le "langage" des cookies avec la langue, de préférence par l'utilisateur.

Donc, d’abord, ce code essaie de détecter le "langage préféré" défini dans l’agent utilisateur (navigateur). Ensuite, le code essaie de lire le 'langage' du cookie. Et enfin - le langage des jeux de commutateurs pour l'application CI

0
Dmitry Khartsy

J'ai utilisé la classe MY_Language de Wiredesignz avec un grand succès. 

Je viens de le publier sur github, car je n'arrive pas à en trouver 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 la v2. 

0
Mei