diff --git a/framework/core/src/Discussion/Discussion.php b/framework/core/src/Discussion/Discussion.php index 544b7f042..5db3bc980 100644 --- a/framework/core/src/Discussion/Discussion.php +++ b/framework/core/src/Discussion/Discussion.php @@ -18,6 +18,7 @@ use Flarum\Discussion\Event\Renamed; use Flarum\Discussion\Event\Restored; use Flarum\Discussion\Event\Started; use Flarum\Foundation\EventGeneratorTrait; +use Flarum\Locale\LocaleManager; use Flarum\Notification\Notification; use Flarum\Post\MergeableInterface; use Flarum\Post\Post; @@ -445,6 +446,6 @@ class Discussion extends AbstractModel protected function setTitleAttribute($title) { $this->attributes['title'] = $title; - $this->slug = Str::slug($title); + $this->slug = Str::slug($title, '-', resolve(LocaleManager::class)->getLocale()); } } diff --git a/framework/core/tests/integration/api/discussions/CreateTest.php b/framework/core/tests/integration/api/discussions/CreateTest.php index 0b3b9994f..f10db111e 100644 --- a/framework/core/tests/integration/api/discussions/CreateTest.php +++ b/framework/core/tests/integration/api/discussions/CreateTest.php @@ -133,6 +133,35 @@ class CreateTest extends TestCase $this->assertEquals('test - too-obscure', Arr::get($data, 'data.attributes.title')); } + /** + * @test + */ + public function can_create_discussion_with_current_lang_slug_transliteration() + { + $this->app()->getContainer()->make('flarum.locales')->setLocale('zh'); + + $response = $this->send( + $this->request('POST', '/api/discussions', [ + 'authenticatedAs' => 1, + 'json' => [ + 'data' => [ + 'attributes' => [ + 'title' => '我是一个土豆', + 'content' => 'predetermined content for automated testing', + ], + ] + ], + ]) + ); + + $this->assertEquals(201, $response->getStatusCode()); + + /** @var Discussion $discussion */ + $discussion = Discussion::firstOrFail(); + + $this->assertEquals('wo-shi-yi-ge-tu-dou', $discussion->slug); + } + /** * @test */