Szukam wielu godzin, ale nie mogłem znaleźć żadnego jasnego, skutecznego sposobu, aby to zrobić: /
Posiadam serwis Codeigniter w języku angielskim i muszę teraz dodać język polski. Jaki jest najlepszy sposób, aby moja witryna była w dwóch językach, w zależności od wyboru odwiedzających?
czy istnieje sposób na utworzenie plików tablic dla każdego języka i wywołanie ich w plikach widoku zależy od wyboru Session from lang? Nie chcę używać bazy danych.
Doceń pomaga! Kończy mi się termin: / dzięki !!
arrays
session
codeigniter
multilingual
projektant próbuje kodować
źródło
źródło
Odpowiedzi:
Widziałeś bibliotekę językową CodeIgniter ?
W Twoim przypadku...
polish_lang.php
ienglish_lang.php
wewnątrzapplication/language/polish
$lang['hello'] = "Witaj";
$this->lang->load('polish_lang', 'polish');
$this->lang->line('hello');
Po prostu zapisz wartość zwracaną przez tę funkcję w zmiennej, aby móc jej użyć w swoim widoku.Powtórz kroki dla języka angielskiego i wszystkich innych potrzebnych języków.
źródło
Aby dodać język do sesji, zdefiniowałbym pewne stałe dla każdego języka, a następnie upewniłbym się, że biblioteka sesji jest ładowana automatycznie w config / autoload.php lub ładujesz ją, kiedy jej potrzebujesz. Dodaj żądany język użytkowników do sesji:
$this->session->set_userdata('language', ENGLISH);
Następnie możesz go pobrać w dowolnym momencie:
$language = $this->session->userdata('language');
źródło
W kontrolerze dodaj następujące wiersze podczas tworzenia kreatora
czyli po
rodzic :: Kontroler ();
dodaj poniższe 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ść go w katalogu system \ application \ helpers
function label($label, $obj) { $return = $obj->lang->line($label); if($return) echo $return; else echo $label; }
dla każdego języka utwórz katalog ze skrótami języka, takimi jak en, nl, fr, itd., w systemie \ application \ languages
utwórz plik językowy w powyższym (odpowiednim) katalogu, który będzie zawierał 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 w różny sposób, zgodnie z wymaganiami, np. jeśli chcesz osobnego pliku językowego do zarządzania zapleczem (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 żądanym języku, uzyskaj dostęp do etykiet, jak pokazano poniżej
label ('witaj', $ this);
LUB
label ('cześć słowo', $ this);
zwróć uwagę na spację w hello & word, której możesz użyć w ten sposób :)
jeśli nie ma zdefiniowanej etykiety w pliku językowym, po prostu wydrukuje to, co przekazałeś do etykiety funkcji.
źródło
Druga odpowiedź Randella.
Jednak zawsze można zintegrować GeoIP, takie jak http://www.maxmind.com/app/php lub http://www.ipinfodb.com/ . Następnie możesz zapisać wyniki z klasą sesji codeigniter.
Jeśli chcesz używać interfejsu API ipinfodb.com Możesz dodać plik ip2locationlite.class.php do folderu biblioteki aplikacji codeigniter, a następnie utworzyć funkcję modelową, aby wykonać dowolną logikę geoip, której potrzebujesz dla swojej aplikacji, na przykład:
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; }
źródło
Aby ułatwić użytkowanie, CI zaktualizowało to, więc możesz po prostu użyć
$this->load->helper('language');
i do tłumaczenia tekstu
lang('language line');
a jeśli chcesz wypaczyć go wewnątrz etykiety, użyj opcjonalnego parametru
lang('language line', 'element id');
To wyjdzie
// becomes <label for="form_item_id">language_key</label>
Dobre czytanie http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html
źródło
Użyłem klasy MY_Language Wiredesignz z wielkim sukcesem.
Właśnie opublikowałem go na githubie, bo 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.
źródło
Podczas zarządzania rzeczywistymi plikami, rzeczy mogą dość łatwo stracić synchronizację, chyba że jesteś naprawdę czujny. Dlatego uruchomiliśmy (beta) bezpłatną usługę o nazwie String, która umożliwia łatwe śledzenie plików językowych i współpracę z tłumaczami.
Możesz zaimportować istniejące pliki językowe (w postaci tablicy PHP, PHP Define, ini, po lub .strings) lub stworzyć własne sekcje od podstaw i dodawać zawartość bezpośrednio przez system.
Sznurek jest całkowicie darmowy, więc sprawdź go i powiedz nam, co myślisz.
W rzeczywistości jest również oparty na Codeigniter! Sprawdź wersję beta pod adresem http://mygengo.com/string
źródło
Śledź to https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n
to proste i przejrzyste, sprawdź również dokument @ http://ellislab.com/codeigniter/user-guide/libraries/language.html
jest o wiele prostsze niż
źródło
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 następnie używam zwykłego wewnętrznego mechanizmu CI
o, prawie zapomnij! w widokach używam przycisków, które ustawiają „język” plików cookie z preferowanym przez użytkownika językiem.
Więc najpierw ten kod próbuje wykryć "preferowany język" ustawiony w agencie użytkownika (przeglądarce). Następnie kod próbuje odczytać „język” pliku cookie. I na koniec - przełącznik ustawia język dla aplikacji CI
źródło
możesz stworzyć taką funkcję
function translateTo($language, $word) { define('defaultLang','english'); if (isset($lang[$language][$word]) == FALSE) return $lang[$language][$word]; else return $lang[defaultLang][$word]; }
źródło
isset($lang[$language][$word]) == FALSE
wystarczyłby właśnie w ten sposóbisset($lang[$language][$word])
, ponieważ isset zwraca tylko prawdę i fałsz. Po trzecie, kiedy oceniasz, czy coś jest fałszywe, ZAWSZE używaj===
do weryfikacji typu .Przyjacielu, nie martw się, jeśli masz zainstalowaną aplikację wbudowaną w codeignitera i chcesz dodać pakiet językowy, wykonaj następujące kroki:
1. Dodaj pliki językowe w folderze application / language / arabic (dodaję arabski lang w sma2 wbudowany w ci)
2. Przejdź do pliku o nazwie
setting.php
w aplikacji / modułów / Ustawienia / widoki / 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.
źródło
setting.php
jeśli używałeś jakiejkolwiek biblioteki lub pomocnika, najpierw udostępnij go.