6

我正在 Laravel 中创建一个带有后端的应用程序。后端需要管理下载到应用程序的对象集合。对象必须根据设备语言进行本地化。

在 Laravel 中是否有一种简单的方法可以做到这一点?也许是一个雄辩的或 Laravel 插件?我想避免自己编写本地化支持。

(Laravel 内置的本地化仅针对界面,不支持 Eloquent 对象)

4

5 回答 5

10

你需要自己写。首先,您必须对数据库表进行建模以支持多语言内容,然后在您的模型中,您将能够说以下内容:

class Content extends Eloquent
{

   public function scopeEnglish($query)
   {
          return $query->where('language', '=', 'en');
   }

   public function scopeSpanish($query)
   {
      return $query->where('language', '=', 'es');
   }
}


class Post extends Eloquent
{
  public function content()
  { 
     return $this->hasMany('Content'); 
  }
}

然后你可以像这样使用它:

$englishContent = Posts::find($id)->content->english()->get();
$spanishContent = Posts::find($id)->content->spanish()->get();
于 2013-09-30T11:36:44.123 回答
8

很高兴帮助的答案似乎非常适合具有多种语言的多语言网站。我发现当您的网站只有两种/三种语言时,这样做有点笨拙。

我所做的是为每个可翻译字段设置两列。对于title我在数据库中的属性title_entitle_es. 之后,在控制器中只需设置此方法即可进行自动翻译。

public function getTitleAttribute()
{
    $locale = App::getLocale();
    $column = "title_" . $locale;
    return $this->{$column};
}

现在,当您调用Post::find($id)->title它时,它会自动获取当前语言的那个。

希望能帮助到你。干杯!

于 2014-04-11T07:06:33.977 回答
7

我做了类似但更通用的

Schema::create('index', function(Blueprint $table) {
        $table->increments('id');
        $table->string('title_uk');
        $table->string('title_ru');
        $table->string('title_en');
        $table->string('heading_uk');
        $table->string('heading_ru');
        $table->string('heading_en');
        $table->string('photo');
        $table->timestamps();
    });

该模型

public function TextTrans($text)
{
    $locale=App::getLocale();
    $column=$text.'_'.$locale;

    return $this->{$column};
}

现在我为每个语言版本以及每个字段都不会规定一个特定的功能,并导致这一切:

$text=Index::find('1'); $text->TextTrans('title'); $text->TextTrans('heading');

于 2016-02-22T09:14:46.690 回答
1

在@user1067281 回答之后,我找到了一个很棒的多语言网站高级教程。

您应该完全检查一下:https ://medium.com/laravel-4/26cdc75e4810

于 2014-05-05T00:43:24.937 回答
0

Eloquent 模型和静态语言资源有一些翻译包。您可以将它们组合起来,这取决于您的情况。

当您只想通过外联网(有点前端)翻译您的资源或将翻译外包给第三方(如客户或内容创建者)时,这些包可能很有用,因此这些将您的翻译文件存储在数据库中:
https://github .com/barryvdh/laravel-translation-manager
https://github.com/joedixon/laravel-translation

为了使您的 Eloquent 模型成为多语言,请将其存储为 JSON 数组。如果您正在创建一种类似于 CMS 的应用程序,您将需要多语言标题或内容正文。以下软件包可能有助于实现这一目标:
https ://github.com/Astrotomic/laravel-translatable
https://github.com/spatie/laravel-translatable

于 2021-02-04T09:02:36.863 回答