joedixon / laravel-translation

Translation management for your Laravel application.
MIT License
699 stars 231 forks source link

Illuminate\Contracts\Translation\Loader contract #154

Open StApostol opened 3 years ago

StApostol commented 3 years ago

Describe the bug The Illuminate\Translation\Translator expects either a string or an array to be loaded through the Illuminate\Contracts\Translation\Loader. But JoeDixon\Translation\ContractDatabaseLoader returns a collection (https://github.com/joedixon/laravel-translation/blob/master/src/ContractDatabaseLoader.php#L34 https://github.com/joedixon/laravel-translation/blob/master/src/ContractDatabaseLoader.php#L39) But https://github.com/joedixon/laravel-translation/blob/master/src/ContractDatabaseLoader.php#L28 return array

To Reproduce Steps to reproduce the behavior:

  1. switch driver to database
  2. call trans for return group example trans('carbon_lang') or array trans('carbon_lang.list')

Expected behavior trans('carbon_lang') should return array

carbon_lang.php

return array(
    'year' => ':count Jahr|:count Jahre',
    'y' => ':countJ|:countJ',
    'month' => ':count Monat|:count Monate',
    'm' => ':countMon|:countMon',
    'week' => ':count Woche|:count Wochen',
    'w' => ':countWo|:countWo',
    'day' => ':count Tag|:count Tage',
    'd' => ':countTg|:countTg',
    'hour' => ':count Stunde|:count Stunden',
    'h' => ':countStd|:countStd',
    'minute' => ':count Minute|:count Minuten',
    'min' => ':countMin|:countMin',
    'second' => ':count Sekunde|:count Sekunden',
    's' => ':countSek|:countSek',
    'ago' => 'vor :time',
    'from_now' => 'in :time',
    'after' => ':time alt',
    'before' => ':time zuvor',

    'year_from_now' => ':count Jahr|:count Jahren',
    'month_from_now' => ':count Monat|:count Monaten',
    'week_from_now' => ':count Woche|:count Wochen',
    'day_from_now' => ':count Tag|:count Tagen',
    'year_ago' => ':count Jahr|:count Jahren',
    'month_ago' => ':count Monat|:count Monaten',
    'week_ago' => ':count Woche|:count Wochen',
    'day_ago' => ':count Tag|:count Tagen',

   'list' => array(
       'first element',
       'second element',
   ),
);
StApostol commented 3 years ago

Maybe better return from Database::getGroupTranslationsFor next structure. Because it is more in line with the file driver

$translationArray = [];

$translations->map(function ($translations) use (&$translationArray) {
  $translations->map(function ($translation) use (&$translationArray) {
     Arr::set($translationArray, "{$translation->group}.{$translation->key}", $translation->value);
  });
});

return collect($translationArray);