Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Wangarad kdy 19. 06. 2019, 16:03:23

Název: Laravel - změna jazyka JSON
Přispěvatel: Wangarad kdy 19. 06. 2019, 16:03:23
Dobry den.

Hram sa trochu s laravelom a prekladmy. V app\services\localeservice.php mam toto

<?php

namespace App\Services;

class
LocaleService
{
   private
$flags = [
       
'en' => 'us',
       
'da' => 'dk',
       
'el' => 'gr',
       
'cs' => 'cz',
       
'sv' => 'se',
       
'sl' => 'si',
       
'et' => 'ee'
   
];

   private
$names = [
       
'en' => 'English',
       
'de' => 'Deutsch',
       
'es' => 'Español',
       
'fr' => 'Français',
       
'pt' => 'Português',
       
'nl' => 'Nederlands',
       
'ru' => 'Русский',
       
'cs' => 'Česky',
       
'it' => 'Italiano',
       
'fi' => 'Suomi',
       
'sv' => 'Svenska',
       
'hu' => 'Magyar',
       
'el' => 'Ελληνικά',
       
'da' => 'Dansk',
       
'lv' => 'Latviešu',
       
'lt' => 'Lietuvių',
       
'et' => 'Eesti',
       
'sk' => 'Slovenčina',
       
'sl' => 'Slovenščina',
   ];

   private
$locales;
   private
$locale; // current user locale

   
public function __construct()
   {
       
$this->locale = app()->getLocale();

       
// English locale is available by default
       
$this->locales = new \stdClass();
       
$this->locales->en = new \stdClass();
       
$this->locales->en->flag = $this->flags['en'];
       
$this->locales->en->name = $this->names['en'];

       
// loop through language files
       
foreach (glob(resource_path('lang/*.json')) as $filePath) {
           
$languageCode = substr($filePath, strrpos($filePath, '/') + 1, 2);
           
$this->locales->$languageCode = new \stdClass();
           
$this->locales->$languageCode->flag = array_key_exists($languageCode, $this->flags) ? $this->flags[$languageCode] : $languageCode;
           
$this->locales->$languageCode->name = isset($this->names[$languageCode]) ? $this->names[$languageCode] : $languageCode;
       }
   }


   
/**
    * Get currenct language code
    * @return \Illuminate\Session\SessionManager|\Illuminate\Session\Store|mixed
    */
   
public function locale() {
       return
$this->locales->{$this->locale};
   }

   
/**
    * Get all locales
    *
    * @return \stdClass
    */
   
public function locales()
   {
       return
$this->locales;
   }

   
/**
    * Get all locales codes, i.e. en, de, fr etc
    * @return array
    */
   
public function codes() {
       return
array_keys(get_object_vars($this->locales));
   }

   
/**
    * Get current locale code
    * @return \Illuminate\Session\SessionManager|\Illuminate\Session\Store|mixed
    */
   
public function code() {
       return
$this->locale;
   }

}


na front ende potom

<select name="LOCALE" class="custom-select">
                                @foreach($locales as $code => $locale)
                                    <option value="{{ $code }}" {{ $code==config('app.locale') ? 'selected' : '' }}>{{ $locale->name }}</option>
                                @endforeach
                            </select>


problem je ze to mi vracia len dropdown select a ja by som to chcel "horizontalne" - teda vypis do riadku vedla seba.
Název: Re:Laravel - změna jazyka JSON
Přispěvatel: hechj kdy 19. 06. 2019, 19:58:47
Tak ten dropdown v šabloně vyhoď a nahraď ho divem, spanem nebo něčím jiným. Foreach ponechej, hodnoty {{code}} a {{locale->name}} též a obal to nějakým tagem. Že tys to ani nezkusil? Napiš ještě, čeho chceš dosáhnout, protože problém bude nejspíš někde jinde.
Název: Re:Laravel - změna jazyka JSON
Přispěvatel: 3ugeene kdy 19. 06. 2019, 21:44:06
jn. takovyhle otazky jsou snad uz vysmech proboha
Název: Re:Laravel - změna jazyka JSON
Přispěvatel: ZAJDAN kdy 19. 06. 2019, 22:56:42
toto vyvoří to dropdown menu
<select>
<option></option>
<option></option>
</select>

a to právě potřebuješ nahradit nějakým jiným HTML tagem/elementem
jak zde bylo zmíněno tak třeba <span>, <div>

<div  class="custom-select">
                                @foreach($locales as $code => $locale)
                                    <span>{{ $locale->name }}</span>
                                @endforeach
</div>

v tom spanu to bude potřeba ještě upravit...dal jsem tam jen pointu