本地化数据库结果

时间:2014-04-04 11:31:49

标签: php database laravel localization

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

1 个答案:

答案 0 :(得分:1)

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

例如,像博客文章这样的条目会有一些在所有网站语言中都很常见的字段,但标题,内容和slug等内容都是特定于语言环境的。当用户请求信息时,将从“帖子”中检索所有公共信息。表格,而区域设置特定的翻译将从' 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;
}
相关问题