Autor Zpráva
zedna
Profil
Ahoj pracuji na jednom redakčním systému a teď potřebuji vytvořit jazykové mutace, případně i možnost změnit si pomocí nějaké ikony jazyk webu.
Jaký způsob by podle vás byl nejlepší? Nejjednodušší mi připadá vytvořit jazykové soubory a přepínat je. Pokud ale někdo bude chtít i vícejazyčný obsah z databáze, tak bych stejně musel použít přepínání v databázi.

zase nechci zbytečně "znepřehlednit" data v MySQL tím, že budu do různých tabulek přidávat jazykový sloupec.(pokud se mi vůbec vyplatí dělat možnost multijazyčného webu-obsahu)

taky je možnost udělat jazykový soubor pro administraci apod. a pro obsah vytvořit sloupec jazyk a podle jazyka vypisovat obsah?ale to by platilo i pro menu, pluginy atd.

tzn. je lepší jazykový soubor nebo překlady v databázi nebo ještě jiné řešení?
ShiraNai7
Profil
zedna:
Pro systémové popisky jazykové soubory, pro obsah nějakým způsobem uzpůsobená databáze.
zedna
Profil
díky, takhle jsem si myslel že to asi udělám.

tu databázi asi udělám tak, že tam kde uživatel vkládá nějaký obsah (menu,kategorie,novinky,články,...) přidám kolonku pro jazyk a uživatel si vždicky zobrazí jaký chce jazyk..pokud nebude vyplněn, tak se zobrazí defaultní...uff to zas bude "papírování"
zedna
Profil
nastal mi ale jeden problém, pokud chci aby si mohli svůj vlastní jazyk zvolit i neregistrovaní členové, pak sice jazyk nastavím do proměnné ale dál už se mi neuchová při přechodu na další stránku.

zkusil jsem použít tady z nějaké diskuze

$lang = $_GET['lang']; If ($lang == ""){$lang = $_POST['lang']; } If ($lang == ""){$lang = "en"; } 


pro výběr jazyka ale při přechodu se jazyk nastaví vždy na "en". je blbost si to pokaždé předávat v odkazu, tak se ptám..je nějaký způsob jak tu proměnnou uchovat? napadlo mě session nebo cookie ale nemám s tím zkušenosti
Stano
Profil
zedna:
napadlo ta správne. cookies by boli asi vhodnejšie.
zedna
Profil
nj ale nebude to potom dělat problém při seo optimalizaci?myslím tím aby vyhledávače potom indexovaly všechny jazykové verze
joe
Profil
zedna:
$langs = array('en', 'cs');
$defaultLang = $langs[0];
$lang = isset($_GET['lang']) ? $_GET['lang'] :  isset($_POST['lang']) ? $_POST['lang'] : $defaultLang;
if(!in_array($lang, $langs)) {
  $lang = $defaultLang;
}


Jazyk pak musíš předávat do ostatních odkazů a nebo třeba můžeš v HTML využít tagu <base>, kam zadáš adresu s jazykem a ostatní odkazy pak budou relativní. Ukládat jazyk do cookies je zbytečné, když to máš v URL. Pokud máš více jazykový web, pak by měla být každá adresa rozlišitelná podle její URL.
zedna
Profil
super díky, vyzkouším.
jinak nevím jestli to půjde přes base, protože to dělám pro tento redakční systém, kde hlavní strana je http://cmsss.all4all.cz/index.php a pak tam je tam ještě možnost http://cmsss.all4all.cz/content.php?id=16 pro články.

napadlo mě ještě jestli by to nešlo udělat pomocí htaccess, že bych na konec adresy dosahil proměnnou lang=$lang

no ale nakonec to možná vyřeším úplně nejjednodušeji pomocí google translator tools:

<div id="google_translate_element"></div><script>
function googleTranslateElementInit() {
  new google.translate.TranslateElement({
    pageLanguage: 'auto',
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE
  }, 'google_translate_element');
}
</script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
joe
Profil
zedna:
Ani nevím, jestli by to přes htaccess nějak šlo, možná ano, ale je to zbytečné.

Přes „google translator tools“ to je přes JavaScript, bude problém s indexací.
zedna
Profil
to je fakt, pak stačí jenom jedna jazyková verze.
je pravda, že htaccess taky nemusí každý použít. nicméně přemýšlel jsem už dřív nad automatickou detekcí jazyka uživatele a podle toho ten jazyk přiřadit k proměnné. tohle by pro mě bylo nejjednodušší ale asi to není příliš spolehlivé
zedna
Profil
tak jsem použil ten tvůj kód joe ale stále tu mám problém s uchováním proměnné při přechodu na jinou stránku (i refresh).

pomocí formuláře si změním proměnnou:

		<form action='' method='POST'>
		<table width='200' border='0'>


<tr><td>Jazyk/Language:
<select name='lang'> 
<option value='cz'>Česky</option>
<option value='en'>English</option>
<option value='de'>Deustch</option>
<option value='fr'>Francais</option>
</select></td></tr>
		
		</table>
		</form>

tu proměnnou vkládám i do <base>:

<base href='$base_directory' lang='$lang' target='_self'>


ale když si vypisuju proměnnou na stránce, tak se mi po přechodu vždicky hodí $defaultLang

zkouším různý způsoby ale nedaří se mi stále uchovat proměnnou v array
zedna
Profil
hotovo, vyřešeno. pomohl mi malý kontrolní script na stejný problém, kde session neukládala proměnnou

<?php 
ini_set('session.use_cookies', '0'); 
unset($_COOKIE[session_name()]); 
session_start(); 
if (!empty($_GET['data'])) 
$_SESSION['sessData'] = $_GET['data']; 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=windows-1250"> 
<title></title> 
</head> 
<body> 
<?php 
print_r($_SESSION); 
?> 
<form> 
<input type="hidden" name="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>"> 
<input type="text" name="data"> 
<input type="submit"> 
</form> 
</body> 
</html>


diskuzi, kde to je jsem našel zde
Toto téma je uzamčeno. Odpověď nelze zaslat.

0