小编rol*_*dow的帖子

强制Twig Locale

我想使用Twig模板系统来模拟我的电子邮件.电子邮件的区域设置应基于用户设置,而不是基于会话或请求区域设置.在渲染Twig模板时如何强制语言环境?

该手册确实提到了如何强制翻译器的语言环境.但我想将此区域设置传递给render()方法,以便在此区域设置中呈现树枝模板内的翻译.

这是使用不同的模板,因为我觉得这迫使在特定的语言环境的模板中的转换.

所以,以Symfony为例,我正在寻找这样的东西:

public function indexAction($name)
{
    $message = \Swift_Message::newInstance()
        ->setSubject('Hello Email')
        ->setFrom('send@example.com')
        ->setTo('recipient@example.com')
        ->setBody(
            $this->renderView(
                'HelloBundle:Hello:email.txt.twig',
                array('name' => $name),
                'nl_NL' // <-- This would be nice!
            )
        )
    ;
    $this->get('mailer')->send($message);

    return $this->render(...);
}
Run Code Online (Sandbox Code Playgroud)

php symfony twig

30
推荐指数
2
解决办法
2万
查看次数

使用标签在翻译中使用占位符

在Symfony/Twig中,我可以通过在翻译块中使用百分比来使用标记.例如:

Hello {{nickname}}
Run Code Online (Sandbox Code Playgroud)

会成为

{% trans %}Hello %nickname%{% endtrans %}
Run Code Online (Sandbox Code Playgroud)

这按预期工作.我传递给Twig的占位符数组会自动映射到%placeHolder%.不需要额外的工作.所以这适用于来自控制器的我的PHP数组:

Array('nickname' => 'rolandow')
Run Code Online (Sandbox Code Playgroud)

当我想在翻译块中使用昵称时,我所要做的就是用百分比%来包围它.不幸的是,当我传递给它时,这似乎不起作用trans.

现在我想使用标签翻译整个文本块.我无法弄清楚如何在翻译中使用这些标签.所以,我的树枝看起来像这样:

{{ say.hello|trans }}
Run Code Online (Sandbox Code Playgroud)

和我的翻译片段

<trans-unit id="1">
  <source>say.hello</source>
  <target>Hello %nickName%, how are you doing today? lots-of-text-here</target>
</trans-unit>
Run Code Online (Sandbox Code Playgroud)

我通过在我的模板中使用它来实现它,但感觉就像做两次.我现在需要将占位符数组再次放入trans函数中.例如:

{{ say.hello|trans('%nickName%' : nickName) }}
Run Code Online (Sandbox Code Playgroud)

如果我想在控制器中使用给予twig的其他标签,我也需要将它们传递给翻译器.我不能以某种方式通过完整的阵列吗?

internationalization symfony twig

8
推荐指数
1
解决办法
4664
查看次数

Git从不(自动)合并composer.json

我想避免git自动合并我的composer.json.这样我可以在开发分支中使用composer.json,该分支使用dev-develop包,而master中的那个只使用dev-master包.

我可以使用这里建议的两个composer.json文件,但我担心我最终会忘记在我的composer.json中为master添加一个bundle.特别是在自动化任务时,这可能最终导致灾难.

所以实际上我想要git:

  • 合并composer.json时总是冲突,所以我可以在进入分支之前手动编辑它.
  • 只根据行数合并..所以如果添加/删除一个包,行数改变,那么它应该合并,冲突,等等.如果一行的内容发生变化,可能会忽略它.

git composer-php

6
推荐指数
1
解决办法
962
查看次数

通过GET参数在Symfony中设置语言环境

我创建了一个控制器,该控制器根据加密的GET参数手动设置安全令牌。我用它来创建一个远程登录URL,当用户点击此链接时,它将执行登录。

现在,我想添加语言环境的设置。提供Lang参数时,应设置区域设置。我将此添加到我的控制器:

$lang = strtolower($lang);
$this->getRequest()->getSession()->set('_locale', $lang);
$this->getRequest()->setLocale($lang);
$this->container->get('translator')->setLocale($lang);
Run Code Online (Sandbox Code Playgroud)

根据开发栏,将_locale变量设置为该设置。语言文件虽然未加载,但已恢复为默认语言。

我读过有关创建一个侦听器以实现此目的的信息,但在我看来,当您想在URL中提供语言时,这很有用。我不想将其添加到我的路由中,我只想在创建会话时设置语言环境。

更新:

我去了Symfony提供的“ 模拟旧行为 ”解决方案。设置请求语言环境似乎不起作用。当我在Twig模板中回显此值时,值不相等:req lang: {{ app.request.locale }} session: {{ app.session.get('_locale') }}。虽然如下所示,但LocaleListener仍在工作,我通过插入进行了检查die(),并且还设置了Translator服务的语言环境似乎正常。

因此,通过设置翻译器的语言环境,我可以完成此工作。我不明白为什么。翻译服务不应该使用请求区域设置吗?为什么需要手动设置?

除翻译外,Request对象中的语言环境是否还包含其他内容?

<?php
namespace Mb\MyBundle\Listener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class LocaleListener implements EventSubscriberInterface
{
    private $translator;

    public function __construct($translator) {
        $this->translator = $translator;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();

        if (!$request->hasPreviousSession()) {
            return;
        }

        if (strlen( $request->getSession()->get('_locale') )) {
            $request->setLocale($request->getSession()->get('_locale'));
            $this->translator->setLocale($request->getSession()->get('_locale'));
        }
    }

    static public function …
Run Code Online (Sandbox Code Playgroud)

internationalization symfony

5
推荐指数
1
解决办法
2322
查看次数

psr-0到psr-4更改后无法生成实体

对于我的一些捆绑包,我将psr-0自动加载更改为psr-4.现在,当我尝试使用app/console命令生成实体时,它给了我

找不到"MbDbFooBundle"的基本路径(路径:"/ home/roland/projects/rolandtest/mbmbisbundle/Symfony/vendor/mb/mb-db-foo-bundle",destination:"/ home/roland/projects/rolandtest/mbmbisbundle/Symfony的/供应商/ MB/MB-DB-FOO束").

起初我认为生成的自动加载器会出现问题.但是当我对我的项目进行新的克隆,然后运行composer update来完成供应商时,它仍然会给我这个错误.

php doctrine symfony psr-0 psr-4

5
推荐指数
1
解决办法
710
查看次数

带有方法的对象上的打字稿速度运算符

在我的 angular 项目中,我有一个包含类型和状态字段的对象。状态可能因类型而异。有人可能会说这是糟糕的设计,但目前就是这样。关键是我似乎不能在这个对象上使用扩展运算符,因为编译器说Property 'getStatusList' is missing in type ...

我简化了课程,但它看起来像这样:

export class Foo {
    constructor(
        public type: number,
        public status: number
    ) { }

    getStatusList(): string[] {
        switch (this.type) {
            case 3: {
                return ['Off', 'Interval', 'On Hold']
            }

            default: {
                return ['Off', 'On']
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是使用 typescript 2.9.2 和 angular cli 6.1.1

下面的代码会触发错误,但是在 typescript playground 中编写示例代码时,我想也许我应该使用 Object.assign。虽然我仍然认为我可以使用扩展运算符简单地否决对象的某些属性?

const oldFoo: Foo = new Foo(3, 5);
console.log('old status: ', oldFoo.status);

const newFoo: Foo = { ...oldFoo, type: 1, …
Run Code Online (Sandbox Code Playgroud)

typescript typescript2.0 angular

5
推荐指数
1
解决办法
2644
查看次数