Probleme s Kdyby\Translation

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vosy
Člen | 532
+
0
-

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
+
0
-

@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
+
0
-

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 jelo

Jinak no bootstrap.php jsem nic nemusel dávat

kdyz na localu pojedu prez composer nebude problem na hostingu kde tu moznost treba nemam?

Tirus91
Člen | 199
+
0
-

@vosy: ne ty ten composer potřebuješ jen pro stažení zdrojových kodu, zda se nepletu ;)

Filip Procházka
Moderator | 4668
+
0
-

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
+
0
-

Diky, to symfony staci takze zkopirovat do /libs ???

vosy
Člen | 532
+
0
-

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
+
0
-

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í.

vosy
Člen | 532
+
0
-

aha ja se trochu composeru bojim, nejsem moc kamarad s nejakym psanim prikazu do terminalu :(

Filip Procházka
Moderator | 4668
+
0
-

Tak se to nauč, za rok už jinak ani programovat nepůjde :)

batko
Člen | 219
+
0
-

!!! 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)

vitkutny
Člen | 73
+
0
-

batko napsal(a)

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í :)

stáhni verzi „ace82f9001f57edd2fb3add717ed7fdfc7a76f82“ tam se tato chyba nevyskytuje

Filip Procházka
Moderator | 4668
+
0
-

Pánové, a který z vás založil issue na githubu, co? :)

vosy
Člen | 532
+
0
-

Filip Procházka napsal(a):

Pánové, a který z vás založil issue na githubu, co? :)

Gdybych vedel co a jak tak bych to resil, ale github trochu neovladam spis vubec

Filip Procházka
Moderator | 4668
+
0
-

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