Kdyby/Translation a viacjazycny obsah v databaze
- yelidric
- Člen | 33
Zdravim, mal by som taky dotaz, respektíve by som si potreboval nieco objasnit. Pozeral som dokumentaciu Kdyby/Translation. A chápem že na základe zvoleneho jazyka sa mi nacita subor neon. Ale čo ak potrebujem ťahať texty z databaze? Musim si napísať ku Kdyby/Translation vlastné rozšírenie?
- Hug0
- Člen | 35
Ahoj,
nemusíš,
už se o to postaral někdo
jiný. Dokumentaci najdeš tady
a výsledná tabulka potom může vypadata třeba takhle:
sloupce: (key | locale | message | update_at)
(messages.homepage.nadpis | cs_CZ | Nadpis | 2016–05–12 12:12:12)
(messages.homepage.nadpis | en_US | Title | 2016–05–12 15:12:12)
- David Matějka
- Moderator | 6445
Aby nedoslo k nedorozumeni. Co chces prekladat? „Staticke“ texty (tzn ruzne polozky menu, chyby u formularu, titulky statickych stranek) a jen chces mit moznost to mit v db a treba editovat v db? nebo obsah, tzn treba clanky?
- iru
- Člen | 110
Řeším podobný problém s tím, že u mne se jedná opravdu o titulky, popisky formulářů apod., potřebuji to mít k dispozici v databázi, aby si to mohl potom uživatel sám v administračním rozhraní překládat. Inspirovala jsem se dle @Hug0 , ale asi mám něco špatně:
InvalidArgumentException
There is no dumper associated with format „database“.
v config.neon mám:
extensions:
translation: Kdyby\Translation\DI\TranslationExtension
translation:
default: cs
whitelist: [cs, en]
fallback: [cs_CZ, cs, en]
database:
loader: doctrine
table: translation
columns:
key: key
locale: locale
message: message
updatedAt: updated_at
zde si nejsem jistá, jestli toto je dobře:
database:
loader: doctrine
opsala jsem to z té dokumentace
Tabulku v databázi mám vytvořenou s názvem translation a sloupci: key, locale, message a updated_at
--
– Struktura tabulky translation
--
CREATE TABLE IF NOT EXISTS translation
(
locale
varchar(250) COLLATE utf8_unicode_ci NOT NULL,
message
varchar(250) COLLATE utf8_unicode_ci NOT NULL,
updatedAt
datetime NOT NULL,
key
varchar(250) COLLATE utf8_unicode_ci NOT NULL,
id
int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci;
dále BasePresenter
use Kdyby\Translation\Translator;
use Symfony\Component\Translation\Writer\TranslationWriter;
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/** @persistent */
public $locale;
/** @var Translator @inject */
public $translator;
/** @var TranslationWriter @inject */
public $writer;
public function __construct(Nette\Database\Context $database)
{
$this->database=$database;
}
public function beforeRender()
{
$catalogue = $this->translator->getCatalogue('en'); //catalogue is object with all translations for given language
$catalogue->set('messages.homepage.hello', 'Hi'); //using this method, you can change translations. Or add tran
$catalogue->add(['messages.homepage.farewell' => 'Farewell']); //using this method, you can add new translations. You have to save them in associative array: key => message
$this->writer->writeTranslations($catalogue, 'database'); //with this, you save translations. If you use 'neon' or any other format instead of 'database', you can save all translation to neon files (or another supported format).
}
Pomůžete mne prosím nasměrovat, jak to správně nastavit? Mám to na jinak funkčním webu, kde překlady fungují, ale ze souboru, teď se to pokouším předělat na to načítání z DB.
Editoval iru (9. 11. 2016 16:07)
- Ivorius
- Nette Blogger | 119
@iru a máš vůbec staženou správnou verzi? Protože na tu database potřebuješ tuhle větev https://github.com/…/Translation – respektive Dumper a Loader asi.
Jinak v tvém kodu vidím, že používáš Nette Database, ale v configu máš Doctrinu. Takže správně by mohlo být loader: nettedb
- Shaman
- Člen | 2
@iru musís si změnit composer.json. Za prvé přidat GitHub repository a za druhé změnit verzi kdyby-translation na požadovanou branch s přidáním prefixu ‚dev-‘. Pak spustit composer update.
...
"repositories": [
{
"type": "vcs",
"url": "https://github.com/Kdyby/Translation"
}
],
"require": {
...
"kdyby/translation": "dev-db-driver"
},
...
- zapp
- Člen | 32
@Shaman Takto se mi povedlo natáhnout větev s db driverem a propojení s databází funguje dobře, ale v této větvi není commit s úpravou latte makra pro překlad viz. níže a v master větvi zase není db drive. Poradí někdo co s tím, nebo si mám údělat fork a dopsat databázový driver?
Invoking filters via $template->translate($vars) is deprecated, use ($vars|translate)