【问题标题】:Silverstripe allowed_action translation in url addressurl 地址中的 Silverstripe allowed_action 翻译
【发布时间】:2016-09-10 22:04:24
【问题描述】:

我想知道如何让 allowed_actions 匹配网站的 i18n 语言。我看到的所有模块都没有提供该选项。

使用案例:我制作了一个表单页面提交模块,我想将提交的页面 url 'finished'(英语,EN)翻译成另一种语言,如我的 'termine'(法语,FR)。

网址://example/contactpage/finished

网址://example/contactpage/termine

感谢您的建议!

【问题讨论】:

  • 我对银条一无所知,这不是答案。但我向你保证,你会遇到这种方法的麻烦。你会发现有几种语言使用同一个词,有时用于相同的概念,有时用于不同的概念。你打算如何处理?
  • @MihaiNita 我不确定如果页面的 URL 也被翻译(这可以在 SilverStripe 中实现)是否会成为问题。示例:https://site.tld/{translate.contact}/{translate.contact_finished} -> (en_GB) https://site.tld/contact/finished -> (sv_SE) https://site.tld/kontakt/genomford。只要翻译得好,我认为不会有任何混淆。但我可能误解了这个问题。
  • 两种不同的语言最终可能使用相同的 URL。例如“帮助”被翻译成荷兰语为......“帮助”。所以site.tld/help 页面应该带你到哪个页面,英语还是荷兰语?您可能会说“.tld 是特定于国家/地区的”。也许。但它也可能发生在多语言国家,如加拿大或瑞士。法语中的“页面”是……“页面”。所以site.ca/page 将带您到... 您需要语言 ID 作为子路径:site.ca/fr/page vs site.ca/en/page
  • @Mihai Nita:好的,我明白你的意思。但不要担心。我制作的模块首先用于单一语言并配置到主配置文件中。我认为我的模块不会与另一个多语言模块一起修改......这不是我现在的期望。谢谢回复!

标签: internationalization silverstripe


【解决方案1】:
class SimpleContactPage_Controller extends Page_Controller {

    private static $allowed_actions = array(
        'finished'
    );

    public function finished() {
        ...
    }

    public function init() {

        parent::init();

        $translatedAction   = _t('SimpleContactPage.CONTROLLER', 'finished');
        $urlHandlers        = $this->config()->url_handlers;

        $translatedUrlHandlers = array(
            $translatedAction   => 'finished',
        );

        Config::inst()->update(
            $this->class, 
            'url_handlers', 
            $translatedUrlHandlers + $urlHandlers
        );

    }

}

感谢我找到的link -> 作者:Janne Klouman

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多