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!!
11 answers
Widziałeś bibliotekę językową Codeignitera?
W Twoim przypadku...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.
- musisz utworzyć
polish_lang.php
ienglish_lang.php
wewnątrzapplication/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.
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');
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.
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;
}
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
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
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.
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
Follow this https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n
To proste i jasne, sprawdź również dokument @ http://ellislab.com/codeigniter/user-guide/libraries/language.html
Jego sposób prostszy niż
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
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];
}
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.
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