【问题标题】:Localize Database results本地化数据库结果
【发布时间】:2014-04-04 22:37:41
【问题描述】:

我开发了一个简单的申请表,我用两种语言提供服务。我还在从数据库中填充下拉菜单,并且正在努力解决如何以两种语言呈现该数据。数据不是很动态,但有时可能会添加新条目,因此手动工作对我没有帮助。我还为不同的情况提取了不同数量的行。我很困惑,我认为除非我有两个数据库或将翻译添加到数据库中并与原文一起呈现,否则我没有其他选择。 或者数据库中的一个新列将保存翻译,然后根据选择的语言环境提取正确的列...... 任何想法将不胜感激,谢谢!

【问题讨论】:

    标签: php database laravel localization


    【解决方案1】:

    在我看来,在您的情况下,最好的选择是创建一个单独的表来存储每条记录的翻译。

    例如,像博客文章这样的条目将包含一些在所有网站语言中都通用的字段,但标题、内容和 slug 等内容将是特定于区域设置的。当用户请求信息时,所有通用信息将从“posts”表中检索,而语言环境特定的翻译将从“posts_translations”表中检索。

    这样您就不必为每个翻译手动添加列。虽然从技术上讲这可以正常工作,但如果您不得不添加另一种语言,您会遇到问题。如果翻译存储在单独的表中,那不再是问题。

    以下是使用 Eloquent ORM 时的示例:

    public function getPosts()
    {
        $language = App::getLocale();
        $posts = Post::with([
            'translation' => function ($query) use ($language) {
                    $query->where('language', '=', $language);
            }
        ])->get();
        return $posts;
    }
    

    或者,使用 Laravel 的查询构建器的相同方法:

    public function getPosts()
    {   
        $language = App::getLocale();
        $posts = DB::table('posts')
        ->leftJoin('posts_translations', 'posts.id', '=', 'posts_translations.post_id')
        ->where('posts_translations.language', '=', $language)
        ->get();
        return $posts;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 2016-02-28
      • 2014-12-11
      • 2012-04-19
      相关资源
      最近更新 更多