Sinds vandaag gebruik ik de standaard functionaliteit van Laravel Localization.
Werkt prima zoals dat moet, ipv json bestanden gebruik laravel gewoon php bestanden in mapjes per landcode. En kan ik in de html gewoon `{{ __('message.welcome') }}` doen wat in NL bijvoorbeeld `Hallo` is en in het EN 'Hello'.
Je kan gewoon heel makkelijk laten bepalen welke taal de pagina moet laden door na bijvoorbeeld `/contact`,`/{locale}` te zetten. Contact is een beetje een slecht voorbeeld, maar wat nou als ik de pagina heb, Over ons, in het Engels moet het dan About Us zijn in de url dus over-ons word dan about-us. Heeft iemand enig idee hoe ik dus urls kan vertalen?
Misschien is het handiger om je te verdiepen in de "best practises" van meertalige sites, zonder je in eerste instantie te committeren tot het gebruik van een bepaalde techniek.
Je zou het eigenlijk om moeten draaien: kijk eerst wat het beste werkt / hoe anderen dit aanpakken, en zoek dan (pas) een technische oplossing/implementatie hiervoor.
Dat er bijvoorbeeld `/en/contact` staat is geen probleem, maar stel je hebt `/en/over-ons` dan zie je in de url wel "oh dit is een engelse pagina" alleen is de naam van de pagina nog in het nederlands in de url.
[size=xsmall]Toevoeging op 30/06/2020 22:11:15:[/size]
Heb alles werkend gekregen met een package via composer, werkt super fijn!
[size=xsmall]Toevoeging op 01/07/2020 18:04:52:[/size]
Het vertalen van de data en urls etc. Is gelukt, nu kom ik alleen aan op een ander puntje. Stel je site is in het engels en in het nederlands. dan wil ik dat je met 1 html formulier een bericht in beide talen kan invullen. Met laravel ziet dat er dan zo uit:
public function store(Request $request){
$post = new Post();
$post->lang = 'NL';
$post->name = $request->name_nl;
$post->text = $request->text_nl;
$post->save();
$post = new Post();
$post->lang = 'EN';
$post->name = $request->name_en;
$post->text = $request->text_en;
$post->save();
}
Zodat elke vertaling zijn eigen rij in de database tabel heeft. Ze krijgen standaard van laravel wel een uniek id per rij mee, maar ik wil iets van een post_id maken, die voor zowel engels en nederlands hetzelfde is, zodat ik aan de hand van een query met het post id en lang code het juiste bericht in de juiste taal tevoorschijn tover.
Maar hoe zorg ik er voor dat hij bijvoorbeeld bij de allereerste post een id aan beide talen meegeeft, en bij de volgende keer dat je wat toevoegt, dat het dan weer verder telt?
Het bovenstaande is een handmatige implementatie van een auto-increment id?
Maak gewoon een overkoepelende entiteit als placeholder voor de verschillende talen? Dit is de kapstok waar je dan de artikelen/posts in een specifieke taal aan ophangt.
In het voorbeeld ontbreekt wel de validatie, maar ik vroeg me af of dit de juiste manier is om een oneToMany relatie op te slaan? Post zelf heeft alleen een auto_increment id en timestamps. dus vandaar dat de create functie geen parameters heeft.
[size=xsmall]Toevoeging op 06/07/2020 01:26:54:[/size]
//maakt een post aan met id em timestamps
$post = Post::create();
//maakt een vertaling aan gekoppeld aan de zojuist gemaakte post
$post->translations()->create($this->validateData());
Nu kan ik dus een vertaling aanmaken, en eventueel één extra toevoegen aan een post met het zoeken naar het juiste post id.
Nu vraag ik me af, ik kan in de html heel makkelijk de vertalingen oproepen per post door `$post->translations` te foreachen. Maar als ik bijvoorbeeld
public function show(Post $post){
...
}
heb. Hoe zorg ik er dan voor dat aan de hand van de juiste locale (actieve taal op de pagina). De juiste vertaling wordt getoond? PS. Ik gebruik https://github.com/mcamara/laravel-localization voor vertalingen, misschien dat ik iets met een bepaalde variabel in de controller de juiste taal kan ophalen uit de database om zo de juiste vertaling te pakken?