Fórum Root.cz

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

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

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

Kód: [Vybrat]
<?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($filePathstrrpos($filePath'/') + 12);
            
$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
Kód: [Vybrat]
<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 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 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 19. 06. 2019, 22:56:42
toto vyvoří to dropdown menu
Kód: [Vybrat]
<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>
Kód: [Vybrat]
<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