Có thể sử dụng biến toàn cầu từ config.yml trong tệp dịch trong symfony 2 không? Nếu có, vui lòng cho bạn một số ví dụ hoặc liên kết hữu ích?Làm cách nào để sử dụng giá trị cấu hình trong bản dịch của symfony2?
Trả lời
Bạn có thể làm theo những 2 bước đơn giản:
Tiêm một Global variable trong tất cả các mẫu bằng cách sử dụng cấu hình cành lá:
# app/config/parameters.yml parameters: my_favorite_website: www.stackoverflow.com
Và
# app/config/config.yml twig: globals: my_favorite_website: "%my_favorite_website%"
Sử dụng Message Placeholders để có khả năng đặt văn bản trong tra của bạn nslation:
# messages.en.yml I.love.website: "I love %website%!!" # messages.fr.yml I.love.website: "J'adore %website%!!"
Bạn bây giờ có thể sử dụng cú pháp cành lá sau trong mẫu của bạn để có được kết quả mong đợi của bạn:
{{ 'I.love.website'|trans({'%website%': my_favorite_website}) }}
Cảm ơn, nhưng tôi muốn tránh bước này trong cành. Trong ví dụ này, tôi muốn sử dụng _my_favorite_website_ trực tiếp trong bản dịch và gọi nó theo dạng cành mà không chuyển bất kỳ giá trị nào: '{{'I.love.website' | trans()}}' – japysha
Mmmmh Tôi sợ không đơn giản giải pháp để làm điều này. Dịch vụ dịch thuật yêu cầu bạn chuyển phần giữ chỗ trong một 'mảng()' như một tham số thứ hai khi gọi nó vì vậy nó là một dịch vụ dịch "hạn chế" hơn một nhánh. Bạn có lẽ có thể viết một phần mở rộng cành nếu giữ chỗ luôn giống nhau nhưng đó sẽ là một thủ thuật bẩn ... – cheesemacfly
Đối với tiêm một (hoặc tất cả) cành globals vào bản dịch của bạn, bạn cần để ghi đè dịch vụ dịch. Hãy xem this answer nếu bạn muốn có giải thích chi tiết. Dưới đây là những gì tôi đã làm:
Override tham số translator.class
(ví dụ như trong bạn parameters.yml
):
translator.class: Acme\YourBundle\Translation\Translator
Tạo Translator
dịch vụ mới:
use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator;
class Translator extends BaseTranslator
{
}
Cuối cùng ghi đè cả trans
và transChoice
:
/**
* {@inheritdoc}
*/
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
{
return parent::trans(
$id,
array_merge($this->container->get('twig')->getGlobals(), $parameters),
$domain,
$locale
);
}
/**
* {@inheritdoc}
*/
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
{
return parent::transChoice(
$id,
$number,
array_merge($this->container->get('twig')->getGlobals(), $parameters),
$domain,
$locale
);
}
Trong ví dụ này, tôi đang tiêm tất cả hình cầu xoắn ốc. Bạn chỉ có thể tiêm một cái như thế này:
array_merge(['%your_global%' => $this->container->get('twig')->getGlobals()['your_global']], $parameters)
Bạn có ý nghĩa gì? – cheesemacfly
Tôi muốn sử dụng một số văn bản (ví dụ: www.stackoverflow.com) trong nhiều tệp dịch. Tôi không muốn vượt qua mỗi lần từ twig hoặc php giá trị này trong bản dịch. Chỉ muốn đặt bằng cách nào đó trong bản dịch. – japysha
http://stackoverflow.com/a/15566695/1847340 xem giải pháp này. làm việc cho tôi :) – ferdynator