Autor Zpráva
Ajtak
Profil
Zdravím.

Plánuji udělat multijazyčný web bez použití databáze. Potřeboval bych poradit, jakým směrem se ubírat, při tvorbě jazyků.

Chtěl bych to mít v nějakých souborech ty jazyky.

Chtěl bych, aby v administraci měl možnost editace, ale nechci, aby se načetl soubor do textového pole. Představoval bych si to tak, jak na následujícím obrázku..


Jakým směrem se ubírat?

Jakým způsobem (krom db) by to bylo nejjednodušší?

Díky za odpovědi..,..
Micruss
Profil
Co je tak špatného na použití databáze? Pokud píšeš články nebo něco podobného tak jak chceš udělat název např cz/en včetně textu ?

Pokud ovšem chceš překládat jen některý části webu, který se netahají z databáze tak bych volil cestu přes soubor

<?
require "lang/EN_en.inc";

# v souboru EN_en.inc;

DEFINE('MAIN_PAGE', 'Main page');

# a pak jenom echo a dáš si to tam kam potřebuješ

echo '<h1>'.MAIN_PAGE.'</h1>';
?>

jinak pokud vypisuješ různé věci z databáze tak je dobrý udělat i sloupec v tom jiném jazyku
Ajtak
Profil
Micruss:
Takto jsem to nejprve chtěl udělat, ale nedokážu si představit, jak toto dostanu do těch polí, aby se to dalo upravovat v administraci...

Viz IMG
nemeja
Profil
Normálně budeš mít id slovního spojení a k tomu relaci 1:N.
sloupečky můžeš mít
id | jazyk | text

a pak budeš mít funkci vratText($id, $jazyk); které předáš dané id textu a jazyk v kterém to chceš vrátit.


případně můžeš použít XML soubor
Micruss
Profil
hmmm napadá mě to uložit do array();

$lang = array(
'MAIN_PAGE'=>'Main Page'
);
#pak jen to uložit jako define

foreach($lang as $key=>$val) {
DEFINE($key, $val);
}

# a v administraci bys udělal něco podobnýho
echo "<table>";
echo "<tr><td>Proměná</td><td>Hodnota</td></tr>";
foreach($lang as $key=>$val) {
echo "<tr><td><input type='text' value='$key'></td><td><input type='text' value='$val'></td></tr>";
}
echo "</table>";

ale pak bys musel ukládat ten soubor fwrite();... ale jak říkám lepší je databáze no ;)
nemeja
Profil
Micruss:
Proč array? Víš jak špatně by se to spravovalo? To už je lepší ten XML soubor, na ten jsou parsery. Pokud by se jednalo o velký web, tak by server musel držet opravdu velké pole v paměti. Databáze je na to opravdu jako dělaná a tento výpis se dá skvěle použít i s ní.
Micruss
Profil
Mno vidíš to.. mě ani nenapadlo ;) každopádně přes XML by to měl nejlepší řešení a nejlechčí :) nechápu proč mě to nenapadlo dřív... :D asi bych měl jít už spát -.-
Ajtak
Profil
S XML bohužel nemám zkušenosti.

Jak by vypadal příklad prosím?
nemeja
Profil
<web>
  <1>
    <cs>Hlavní stránka</cs>
    <en>Main page</en>
  </1>
  <2>
    <cs>Vítejte</cs>
    <en>Welcome</en>
  </2>
</web>
Třeba na živě.cz mají tutoriál.
Ajtak
Profil
Po zamyšlení se, jsem dospěl toto závěru, že skutečně bude nejlepší možnost využít SQL databáze. Bude to nejbezpečnější z hlediska editace a práv, a pokud se nemýlím, tak i rychlejší než načítání ze souboru...
Kubo2
Profil
Ajtak:
nedokážu si představit, jak toto dostanu do těch polí, aby se to dalo upravovat v administraci
V administrácii dáš iba výber jazyka:

Po nastavení si, povedzme, niekam, napríklad do DB alebo SESSION uložíš informáciu o aktuálne používanom jazyku, a podľa toho budeš vyberať správny súbor:
<?php

require "$lang.lang.php";

[...]
Ajtak
Profil
Kubo2:
Jo, to je mi jasné, ale mě šlo spíš o to, jak to zobrazovat v těch polích jednotlivých aby se to dalo upravovat.

Jako nebyl by problém, načíst obsah celého souboru do textarea, a pak uložit změny zpátky, ale v tom, že by se to s nějvětší pravděpodobností, nedalo načíst do těch jednotlivých polích...
Medvídek
Profil
Ajtak:
Podobný nástroj jsem nedávno dělal pro naše překladatele:
Web pak mají možnost přepnout do speciálního jazyka IDL, kde se míto textů zobrazí ID překladu, aby nemuseli dohledávat, kde se jaký překlad používá.
japlavaren
Profil
1. databaza
2. ukladat do php suboru ako assoc pole a potom volat include:

slovnik:
array(
  'first' => 'prva',
  'second' => 'druha',
);

<?php
$file = __DIR__ . '/lang.php';

function load($file){
    $dictionary = @include $file;
    if(!is_array($dictionary)) $dictionary = array();

    return $dictionary;
}

function save($file, array $disctionaty){
    $content = '<?php return ' . var_export($data, $return = true) . ';';
    @file_put_contents($file, $content);
}
aDAm
Profil
panove a co tak na to použít funkce přímo v php a zvolit normální translator co vám dokáže dělat i množná čísla atd.?
nemeja
Profil
aDAm:
Nejsem si jistej, jestli zrovna použití překladače je stoprocentní. O jaké funkce se jedná? Myslím, že využití databáze + nějakého šablonovacího systému je naprosto v pořádku.
aDAm
Profil
nemeja:
tak podle toho co chce překládat, pokud systemove texty tak je imho použití překladače vhodnější než to tahat z db, pokud to jsou články atd. tak je zase vhodné použít databázi.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: