/** * Saves a translation into database. * * @param int $variable_id, variable_id * @param int $text * @param int $language_id, string * @param string $group * * @return bool */ public static function doTranslation($variable_id, $text, $language_id, $group = 'general') { if (!is_integer($language_id)) { $language_id = Languages::whereIso($language_id)->first()->id; } if (!is_integer($variable_id)) { /** * First lets check if the translation exists or it has been previously * submitted for translation */ if ($var = Intl::whereText($variable_id)->whereGroup($group)->first()) { $variable_id = $var->id; } else { $var = new Intl(); $var->text = $variable_id; $var->group = $group; $var->md5sha1 = md5($text) . sha1($text); $var->save(); $variable_id = $var->id; } } $translated = Translated::VarLang($variable_id, $language_id); $translated->delete(); $trans = new Translated(); $trans->variable_id = $variable_id; $trans->language_id = $language_id; $trans->translation = $text; $trans->save(); return true; }
/** * If using the return method, it will return an array of the variable */ function lang($text = false, $vars = null, $value = null, $group = null, $locale = null, $force_add = false) { $original_locale = Lang::getLocale(); $params['value'] = $value ? $value : 0; $params['vars'] = $vars ? $vars : []; $params['locale'] = $locale ? $locale : $original_locale; $params['group'] = $group ? $group : 'general'; $params['dynamic'] = false; if (preg_match('/dynamic_/', $params['group'])) { $params['group'] = preg_replace('/dynamic_/', '', $params['group']); $params['dynamic'] = true; } $hash = md5($text) . sha1($text); $file_namespace = 'dbtranslator'; if (preg_match('/\\|/', $text)) { $choose = true; } else { $choose = false; } $config = config('db-translator'); /** * Before anything lets change the locale to the intl locale */ App::setLocale($params['locale']); /** * This will check the existence of the translation on the locale given, not the default */ if (!$force_add) { if (Lang::has($file_namespace . '::' . $params['group'] . '.' . $hash)) { if ($choose) { $text = trans_choice($file_namespace . '::' . $params['group'] . '.' . $hash, $params['value'], $params['vars']); App::setLocale($original_locale); return $text; } else { $text = trans($file_namespace . '::' . $params['group'] . '.' . $hash, $params['vars']); App::setLocale($original_locale); return $text; } } else { /** * If we are using the database translations */ if ($config['use_database']) { if (!Intl::whereText($text)->whereGroup($params['group'])->get()->count()) { $intl = new Intl(); $intl->text = $text; $intl->group = $params['group']; $intl->md5sha1 = $hash; $intl->dynamic = $params['dynamic']; $intl->save(); } } else { /** * first we will check if the translation exists under the fallback language */ App::setLocale($config['default_locale']); if (!Lang::has($file_namespace . '::' . $params['group'] . '.' . $hash)) { // if we don't find it, we should include the file for the original locale // change it with the new array, and save it. /** * Determine if the file exists */ if (Storage::disk($config['storage_driver'])->exists($config['default_locale'] . '/' . $params['group'] . '.php')) { $lang_array = (require base_path('resources/lang/vendor/dbtranslator/' . $config['default_locale'] . '/' . $params['group'] . '.php')); if (!isset($lang_array[$hash])) { $lang_array[$hash] = $text; $file = "<?php\n return [\r\n"; foreach ($lang_array as $k => $v) { $file .= " \"" . $k . "\" => \"" . str_replace('"', '\\"', $v) . "\",\r\n"; } $file .= "];"; Storage::disk($config['storage_driver'])->put($config['default_locale'] . '/' . $params['group'] . '.php', $file); } } else { $file = "<?php\n return [\r\n"; $file .= " \"" . $hash . "\" => \"" . str_replace('"', '\\"', $text) . "\",\r\n"; $file .= "];"; Storage::disk($config['storage_driver'])->put($config['default_locale'] . '/' . $params['group'] . '.php', $file); } } App::setLocale($params['locale']); } // now we will process the string if ($choose) { $params['vars']['count'] = $params['value']; $ms = new MessageSelector(); $text = $ms->choose($text, $params['value'], $params['locale']); $params['vars'] = (new Collection($params['vars']))->sortBy(function ($value, $key) { return mb_strlen($key) * -1; }); foreach ($params['vars'] as $key => $value) { $text = str_replace(':' . $key, $value, $text); } App::setLocale($original_locale); return $text; } else { if (count($params['vars'])) { $params['vars'] = (new Collection($params['vars']))->sortBy(function ($value, $key) { return mb_strlen($key) * -1; }); foreach ($params['vars'] as $key => $value) { $text = str_replace(':' . $key, $value, $text); } } App::setLocale($original_locale); return $text; } } } else { if ($config['use_database']) { if (!Intl::whereText($text)->whereGroup($params['group'])->get()->count()) { $intl = new Intl(); $intl->text = $text; $intl->group = $params['group']; $intl->md5sha1 = $hash; $intl->dynamic = $params['dynamic']; $intl->save(); } } } }