Probleme s Kdyby\Translation
- vosy
- Člen | 532
NETTE v2.0.12
do slozky libs jsem vlozil Kdyby/Translation
v bootstrap mam
<?php
// Load Nette Framework or autoloader generated by Composer
require __DIR__ . '/../libs/autoload.php';
$configurator = new Nette\Config\Configurator;
// Enable Nette Debugger for error visualisation & logging
//$configurator->setDebugMode(TRUE);
$configurator->enableDebugger(__DIR__ . '/../log');
error_reporting(E_ALL ^ E_NOTICE);
// Specify folder for cache
$configurator->setTempDirectory(__DIR__ . '/../temp');
// Enable RobotLoader - this will load all classes automatically
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->addDirectory(__DIR__ . '/../libs')
->register();
// Create Dependency Injection container from config.neon file
// $configurator->addConfig(__DIR__ . '/config/config.neon');
// $configurator->addConfig(__DIR__ . '/config/config.local.neon', $configurator::NONE); // none section
$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/FrontModule/config/config.neon');
$configurator->addConfig(__DIR__ . '/AdminModule/config/config.neon');
// $configurator->addConfig(__DIR__ . '/AdminModule/DefiniceModule/config/config.neon');
// $configurator->addConfig(__DIR__ . '/AdminModule/SystemModule/config/config.neon');
Nette\Forms\Controls\CheckboxList::register();
Kdyby\Translation\DI\TranslationExtension::register($configurator);
$container = $configurator->createContainer();
return $container;
v config.neon
common:
parameters:
php:
date.timezone: Europe/Prague
# zlib.output_compression: yes
nette:
application:
errorPresenter: Error
session:
expiration: 14 days
services:
routerFactory: RouterFactory
router: @routerFactory::createRouter
factories:
translation:
default: cs
fallback: [cs_CZ, cs]
do slozky app/lang
jsem dal soubory ms.cs_CZ.neon a ms.en_US.n neon s prekladam
HomepagePresenter
class HomepagePresenter extends BasePresenter
{
function renderDefault()
{
echo $this->translator->translate('ms.homepage.hello');
}
}
a vysledek
Strict
Declaration of Kdyby\Translation\DI\TranslationExtension::afterCompile() should be compatible with Nette\Config\CompilerExtension::afterCompile(Nette\Utils\PhpGenerator\ClassType $class)
File: .../libs/Kdyby/Translation/DI/TranslationExtension.php Line: 42
32:
33: if (isset(Nette\Loaders\NetteLoader::getInstance()->renamed['Nette\Configurator']) || !class_exists('Nette\Configurator')) {
34: unset(Nette\Loaders\NetteLoader::getInstance()->renamed['Nette\Configurator']); // fuck you
35: class_alias('Nette\Config\Configurator', 'Nette\Configurator');
36: }
37:
38: /**
39: * @author Filip Procházka <filip@prochazka.su>
40: */
41: class TranslationExtension extends Nette\DI\CompilerExtension
42: {
43:
44: const LOADER_TAG = 'translation.loader';
45: const DUMPER_TAG = 'translation.dumper';
46: const EXTRACTOR_TAG = 'translation.extractor';
Editoval vosy (4. 4. 2014 10:28)
- Tirus91
- Člen | 199
@vosy:
osobně jsem to dělal jako ty, ale kvůli těmto problémům jsem přešel na
strukturu od composeru. Raději ho také začni používat. Jakmile jsem
kdyby\Translation nainstaloval skrze composer, tak bylo vše OK a hned mi
to jelo
Jinak no bootstrap.php jsem nic nemusel dávat
do BasePresenteru jsem dal
/** @var \Kdyby\Translation\Translator */
protected $translator;
/**
* @var \Kdyby\Translation\LocaleResolver\SessionResolver
* @autowire
*/
protected $translatorSession;
public function injectTranslator(\Kdyby\Translation\Translator $translator) {
$this->translator = $translator;
}
public function injectTranslatorSession(\Kdyby\Translation\LocaleResolver\SessionResolver $sessionResolver) {
$this->translatorSession = $sessionResolver;
}
a do config.neon jsem uvedl jen toto
translation:
debugger: on
default: cs
fallback: [cs_CZ, cs]
whitelist: ['cs', 'en', 'sk']
resolvers:
session: on
A vše mi jede (ovšem mám novějšší nette :( )
Editoval Tirus91 (4. 4. 2014 10:40)
- vosy
- Člen | 532
Tirus91 napsal(a):
@vosy:
osobně jsem to dělal jako ty, ale kvůli těmto problémům jsem přešel na strukturu od composeru. Raději ho také začni používat. Jakmile jsem kdyby\Translation nainstaloval skrze composer, tak bylo vše OK a hned mi to jeloJinak no bootstrap.php jsem nic nemusel dávat
kdyz na localu pojedu prez composer nebude problem na hostingu kde tu moznost treba nemam?
- Filip Procházka
- Moderator | 4668
Nainstaloval jsi si špatnou verzi, když se podíváš sem a proklikáš si ty verze, tak zjistíš že
pro 2.0.*
je řada 0.10, tedy konkrétně poslední verze
je 0.10.2.
Když si stáhneš správnou verzi ke svému Nette, bude to fungovat ;)
Použit composer můžeš ikdyž to tvůj hosting nepodporuje, jednoduše si
totiž závislosti nainstaluješ na svém počítači a pak celý projekt i s
vendor/
složkou co vygeneruje composer nahraješ na hosting.
Composer totiž generuje relativní cesty a dokonce tuším to generuje
kompatibilní s PHP 5.2, tedy není problém nahrát to na hosting. Na hostingu
už potom žádný composer command pouštět nemusíš
- vosy
- Člen | 532
tak jsem symfony vlozil do /libs
mam tedy strom /libs/Symfony/Component
Nette\InvalidStateException
Ambiguous class Apc\Namespaced\FooBar resolution; defined in /Volumes/..../libs/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/fallback/Namespaced/FooBar.php and in /Volumes/..../libs/Symfony/Component/ClassLoader/Tests/Fixtures/Apc/Namespaced/FooBar.php. search►
- Filip Procházka
- Moderator | 4668
Ta chyba znamená že existují dvě třídy se stejným jménem a Nette robotloader si s tím neumí poradit.
Když nainstaluješ kdyby/translation a nette přes composer, tak chyba zmizí.
- batko
- Člen | 219
!!! stáhl jsem „kdyby/translation“: „v1.1.2“, a jde to sorry
Ahoj, do včera mi všchno šlo normálně a dnes jsem si stáhl z githubu svůj projekt spustil composer update
a hlásí mí to
Call to a member function getLocale() on a non-object
File:
…\vendor\kdyby\translation\src\Kdyby\Translation\Diagnostics\Panel.php:266
public function onRequest(Application $app, Request $request)
265: {
266: $snapshot = array('request' => $request, 'locale' => $this->translator->getLocale());
267: foreach ($this->localeResolvers as $name => $resolver) {
268: $snapshot['resolvers'][$name] = $resolver->resolve($this->translator);
269: }
bohužel netuším so s tím
"kdyby/translation": "1.1.*@dev",
Editoval batko (8. 4. 2014 9:19)
- Filip Procházka
- Moderator | 4668
Vlezeš na tuhle stránku vpravo nahoře máš tlačítko „new issue“, na to klikneš, napíšeš co nefunguje a odešleš. Ovládat formulář umíš, ne? :)
@batko a @vitkutny
mám stejný problém, způsobil to poslední commit, volá se onRequest dříve než register, teda translator je NULL a chybová hláška sedí :)
Opraveno https://github.com/…5b1755f4ceff