najlepszy sposób, aby Strona codeigniter była wielojęzyczna. wywołanie z tablic lang zależy od sesji lang?

Badam godziny i godziny, ale nie mogłem znaleźć żadnego jasnego, skutecznego sposobu, aby to zrobić: /

Mam stronę codeigniter base w języku angielskim i muszę teraz dodać język polski. Jaki jest najlepszy sposób, aby moja strona w 2 język w zależności od wyboru odwiedzających?

Czy Jest jakiś sposób na tworzenie plików tablic dla każdego języka i wywołanie ich w plikach widoku zależy od sesji z wyboru lang? Nie chcę korzystać z bazy danych.

Doceniam pomoc! Kończy mi się deadline: / thanks!!

Author: designer-trying-coding, 2009-08-25

11 answers

Widziałeś bibliotekę językową Codeignitera?

Klasa językowa zapewnia funkcje aby pobrać pliki językowe i linie tekstu dla celów internacjonalizacji.

W folderze systemowym CodeIgniter będziesz Znajdź jeden język zawierający zestawy plików językowych. Możesz stworzyć swój własne pliki językowe w razie potrzeby w kolejności aby wyświetlić błędy i inne komunikaty w inne języki.

Pliki językowe są zazwyczaj przechowywany w Twój katalog system / język. Na przemian możesz utworzyć folder o nazwie language wewnątrz folderu aplikacji i sklepu tam są. CodeIgniter spojrzy pierwszy w katalogu aplikacji/języka. Jeśli katalog nie istnieje lub nie znajduje się tam określony język CI zamiast tego zajrzy do twojego globalnego folder system / language.

W Twoim przypadku...
  • musisz utworzyć polish_lang.php i english_lang.php wewnątrz application/language/polish
  • następnie utwórz klucze wewnątrz tego pliku (np. $lang['hello'] = "Witaj";
  • następnie załaduj go do kontrolera jak $this->lang->load('polish_lang', 'polish');
  • następnie pobierz linię w stylu $this->lang->line('hello'); po prostu przechowuj wartość zwracaną tej funkcji w zmiennej, abyś mógł jej użyć w swoim widoku.

Powtórz kroki dla języka angielskiego i wszystkich innych języków, których potrzebujesz.

 90
Author: Randell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 10:50:35

Aby dodać język do sesji, zdefiniowałbym pewne stałe dla każdego języka, a następnie upewnij się, że biblioteka sesji jest automatycznie ładowana w config/autoload.php, lub ładujesz go kiedy tylko potrzebujesz. Dodaj żądany język użytkownika do sesji:

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

Wtedy możesz go złapać w dowolnym momencie w ten sposób:

$language = $this->session->userdata('language');
 22
Author: Matthew Rapati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 16:34:43

W kontrolerze dodaj następujące linie, gdy stworzysz cunstructor

Czyli po

Parent:: Controller ();

Dodaj poniżej linie

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

Utwórz plik pomocniczy lang_translate_helper.php z następującą funkcją i umieść ją w katalogu system\application \ helpers

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

Dla każdego z języków utwórz katalog ze skrótami językowymi, takimi jak en, nl, fr itp., pod system\application \ languages

Utwórz plik językowy powyżej (odpowiedni) katalog zawierający tablicę $lang zawierającą pary label = > language_value jak podano poniżej

Nl_site_lang.php

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

En_site_lang.php

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

Możesz przechowywać wiele plików dla tego samego języka z różnymi wymaganiami na przykład, jeśli chcesz oddzielny plik językowy do zarządzania backendem (sekcja administratora) możesz go użyć w kontrolerze jako $this - > lang - >load ('nl_admin', 'nl');

Nl_admin_lang.php

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

I wreszcie aby wydrukować etykietę w żądany język, etykiety dostępu jak poniżej w widoku

Label ('Witamy', $this);

Lub

Label ('hello word', $this);

Zwróć uwagę na spację w hello & word, możesz ją również użyć w ten sposób:)

Jeśli w pliku językowym nie ma zdefiniowanej etykiety, po prostu wydrukuje ona to, co przekazałeś do etykiety funkcji.

 7
Author: YoGo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-28 10:00:21

Popieram odpowiedź Randella.

Jednak zawsze można zintegrować GeoIP taki jak http://www.maxmind.com/app/php lub http://www.ipinfodb.com / . Następnie możesz zapisać wyniki za pomocą klasy sesji codeigniter.

Jeśli chcesz użyć ipinfodb.com api można dodać ip2locationlite.klasy.plik php do folderu biblioteki aplikacji codeigniter, a następnie utwórz funkcję modelu, aby wykonać dowolną logikę geoip potrzebną dla Twojej aplikacji, taką as:

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
Author: Ben Mullikin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-13 21:31:38

Dla łatwiejszego użycia Ci zaktualizowali to, więc możesz po prostu użyć

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

I przetłumaczyć tekst

lang('language line');

I jeśli chcesz wypaczać go wewnątrz etykiety, użyj opcjonalnego parametru

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

To wyświetli

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

Do dobrej lektury http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html

 1
Author: Samy Massoud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-10 09:32:34

Podczas zarządzania rzeczywistymi plikami, rzeczy mogą się dość łatwo zsynchronizować, chyba że jesteś naprawdę czujny. Dlatego uruchomiliśmy (beta) bezpłatną usługę o nazwie String, która pozwala na łatwe śledzenie plików językowych i współpracę z tłumaczami.

Możesz importować istniejące pliki językowe (w tablicy PHP, PHP Define, ini, po lub .formaty ciągów) lub tworzyć własne sekcje od podstaw i dodawać treści bezpośrednio przez system.

String is całkowicie za darmo, więc sprawdź to i powiedz nam, co myślisz.

To jest rzeczywiście zbudowany na Codeigniter zbyt! Sprawdź wersję beta na http://mygengo.com/string

 0
Author: user151516,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 23:16:32

Używałem klasy My_language Wiredesignz z wielkim sukcesem.

Właśnie opublikowałem go na GitHubie, ponieważ nigdzie nie mogę znaleźć jego śladu.

Https://github.com/meigwilym/CI_Language

Moje jedyne zmiany to zmiana nazwy klasy na CI_Lang, zgodnie z nowymi zmianami v2.

 0
Author: Mei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-10 13:12:30
 0
Author: Justis Matotoka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 10:15:12

Używam takiego kodu w 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;
}

.... a potem używam Zwykle wewnętrznego mechanizmu CI

O, prawie zapomniałem! w widokach używam przycisków, które ustawiają cookie 'język' z preferowanym przez użytkownika językiem.

Tak więc, najpierw ten kod próbuje wykryć "preferowany język" ustawiony w useragent (przeglądarce) użytkownika. Następnie kod spróbuj odczytać "język" cookie. I ostatecznie-switch ustawia język dla CI-application

 0
Author: Dmitry Khartsy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-08 08:55:39

Możesz utworzyć taką funkcję

function translateTo($language, $word) {  
   define('defaultLang','english');  
   if (isset($lang[$language][$word]) == FALSE)  
      return $lang[$language][$word];  
   else  
      return $lang[defaultLang][$word];  
}
 -1
Author: thanhquanky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-24 16:37:06

Przyjacielu, nie martw się, jeśli masz zainstalowaną aplikację wbudowaną w codeigniter i chcesz dodać pakiet językowy, wykonaj następujące kroki:

1. Dodaj pliki językowe w folderze application / language / arabic (dodaję lang Arabski w sma2 wbudowanym w ci)

2.{[6] } przejdź do pliku o nazwie setting.php w application/modules/settings/views/setting.php . Tutaj znajdziesz tablicę

<?php /*

 $lang = array (
  'english' => 'English',

  'arabic' => 'Arabic',  // i add this here

  'spanish' => 'Español'

Teraz zapisz i uruchom aplikację. Działa dobrze.

 -1
Author: snakehead,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-24 02:51:45