Laravel es una aplicación diseñada para ser local, para adaptarse a varios idiomas y culturas. La localización adapta las aplicaciones internacionalizadas a un idioma específico a través de la traducción.
localhost
. Si no, reemplace localhost
con su propio nombre de dominio o dirección IP (dependiendo de su instalación).En Laravel, al igual que en muchos otros marcos, podemos almacenar traducciones para diferentes idiomas en archivos separados. Hay dos formas de organizar los archivos de traducción de Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Para los idiomas que difieren según el territorio, debe nombrarlos directory/file
del idioma de acuerdo con la norma ISO 15897. Por ejemplo, para el inglés del Reino Unido, usaría en_GB
en lugar de en-gb
. En este artículo, nos centraremos en el segundo enfoque, pero lo mismo ocurre con el primero (excepto en cómo se nombran y recuperan las claves de traducción).
Ahora, vamos a la resources/views/welcome.blade.php
archivo y reemplace el contenido del body
etiqueta con la nuestra, así:
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
Welcome to our website
</div>
</div>
</div>
</body>
Comenzaremos preparando nuestro mensaje de bienvenida de localización, que es muy fácil en Laravel. Todo lo que tienes que hacer es reemplazar el texto “Bienvenido a nuestro sitio web” con el siguiente código: {{ __('Welcome to our website') }}
. Esto le indicará a Laravel que muestre "Bienvenido a nuestro sitio web" de forma predeterminadadefinite y busque las traducciones de esta cadena si se establece un idioma que no sea el inglés (hablaremos de eso más adelante). El inglés se establecerá como el idioma predeterminado.defifinal de nuestra aplicación, por lo que por defectodefiAl finalizar simplemente mostraremos el texto “Bienvenido a nuestra web”. Si la configuración regional es diferente, intentaremos encontrar la traducción correspondiente y se creará en un momento.
Pero, ¿cómo sabe Laravel cuál es el idioma actual o qué idiomas están disponibles en la aplicación? Lo hace mirando la configuración local en la aplicación. config/app.php
. Abra este archivo y busque estas dos claves de matriz asociativas:
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
Las descripciones que se muestran arriba de las teclas deben explicarse por sí mismas, pero en resumen, la clave locale
contiene el pre localdefifinal de su aplicación (al menos, si no se ha establecido ninguna otra configuración regional en el código). Y el fallback_locale
se activa en caso de que establezcamos una configuración regional inexistente en nuestra aplicación.
Mientras tenemos este archivo abierto, agreguemos una nueva clave para nuestra conveniencia que enumere todas las configuraciones regionales que admitirá nuestra aplicación. Usaremos esto más adelante cuando agreguemos un conmutador local. Sin embargo, esta es una tarea opcional ya que Laravel no requiere que la hagamos.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Ahora nuestra aplicación admite tres idiomas: inglés, italiano y francés.
Ahora que hemos establecido todos los lugares con los que trabajaremos, podemos seguir adelante y pasar a traducir nuestro mensaje de bienvenida previa.definoche
Comencemos agregando nuevos archivos de localización a la carpeta. resources/lang
. Primero, crea un archivo resources/lang/it.json
y agregue las traducciones correspondientes, de la siguiente manera:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
A continuación, cree un archivo resources/lang/fr.json
:
{
"Bienvenido a nuestro sitio web": "Bienvenido a nuestro sitio"
}
Como puede ver, siempre nos referimos al mensaje previo.definito que agregamos en el archivo welcome.blade.php
(que era {{ __('Welcome to our website') }}
). La razón por la que no tenemos que crear un archivo en.json
es porque Laravel ya sabe qué mensajes pasamos preconfigurandodefiterminado en la funcion __()
son para nuestro pre localdefinito es.
En este punto, Laravel no sabe cómo cambiar las configuraciones regionales, así que por ahora, hagamos las traducciones directamente dentro de la ruta. Modificar la ruta de bienvenida predefiterminado como se muestra a continuación:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Ya podemos visitar nuestra web, especificando como primer segmento de ruta cualquiera de los idiomas disponibles: por ejemplo, localhost/ru
o localhost/fr
. Debería ver el contenido localizado. En caso de que especifique una configuración regional no compatible o no especifique una configuración regional en absoluto, Laravel usará en
por defectodefinita.
Cambiar la configuración regional para cada enlace del sitio puede no ser lo que desea y puede que no se vea tan limpio estéticamente. Es por eso que realizaremos la configuración de idioma a través de un selector de idioma especial y usaremos la sesión de usuario para mostrar el contenido traducido. Por lo tanto, cree un nuevo middleware dentro del app/Http/Middleware/Localization.php
archivo o ejecutando artisan make:middleware Localization
.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
Este middleware le indicará a Laravel que use la configuración regional seleccionada por el usuario si esta selección está presente en la sesión.
Dado que necesitamos que esto se haga en cada solicitud, también debemos agregarlo a la pila de pre-middlewaredefiterminado en app/http/Kernel.php
para la web
grupo de software intermedio:
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Localization::class, /* <--- add this */
],
A continuación, debemos agregar una ruta para cambiar la configuración regional. Estamos usando una ruta de cierre, pero puede usar exactamente el mismo código dentro de su controlador si lo desea:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Además, no olvide eliminar el conmutador de configuración regional agregado previamente en nuestra ruta previa a la bienvenidadefinoche:
Route::get('/', function () {
return view('welcome');
});
Una vez hecho esto, la única forma en que el usuario puede cambiar el idioma establecido actualmente es ingresando localhost/language/{locale}
. Allí locale
la selección se almacenará dentro de la sesión y redirigirá a los usuarios a su lugar de origen (verifique la Localization
software intermedio). Para probarlo, ve a localhost/language/ru
(siempre que su cookie de sesión esté presente en su navegador) y verá el contenido traducido. Puede moverse libremente por el sitio web o intentar actualizar la página y ver que se conserva el idioma seleccionado.
Ahora necesitamos crear algo en lo que el usuario pueda hacer clic para cambiar el idioma en lugar de ingresar manualmente los códigos locales en la URL. Para hacer esto, agregaremos un verificador de idioma muy simple. Por lo tanto, crea una nueva resources/views/partials/language_switcher.blade.php
archivo con el siguiente código:
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
@foreach($available_locales as $locale_name => $available_locale)
@if($available_locale === $current_locale)
<span class="ml-2 mr-2 text-gray-700">{{ $locale_name }}</span>
@else
<a class="ml-1 underline ml-2 mr-2" href="language/{{ $available_locale }}">
<span>{{ $locale_name }}</span>
</a>
@endif
@endforeach
</div>
Incluya el conmutador recién creado en la vista de "bienvenida":
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
@include('partials/language_switcher')
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
{{ __('Welcome to our website') }}
</div>
</div>
</div>
</body>
Abre el app/Providers/AppServiceProvider.php
y agregue el código para compartir cuando se componga nuestro selector de idiomas. Específicamente, compartiremos la configuración regional actual a la que se puede acceder como un archivo {{ $current_locale }}
.
Trabajaremos principalmente con resources/views/welcome.blade.php
, por lo que todo debe ocurrir en nuestra vista de bienvenida a menos que se especifique lo contrario.
Por ejemplo, digamos hola a nuestro usuario imaginario (Amanda) en lugar de solo mostrar un mensaje genérico:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Tenga en cuenta que usamos el nombre con la primera letra en minúsculas, pero el marcador de posición con la primera letra en mayúsculas. De esta forma, Laravel puede ayudarte a poner en mayúscula automáticamente la palabra real. Esto sucederá si el marcador de posición comienza con una letra mayúscula, por ejemplo, :Name
produce "Caroline" o una palabra en mayúsculas, :NAME
, produce “CAROLINE”.
También actualizamos nuestros archivos de traducción. resources/lang/fr.json
e resources/lang/it.json
, ya que por el momento solo veremos la versión en inglés en cualquier lugar ya que las claves de traducción no coinciden con las traducciones.
Francés:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
italiano:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Para ver la pluralización en acción, agreguemos un nuevo párrafo de texto.
Para realizar la pluralización, debe utilizar la función trans_choice
en lugar de __()
, p.ej:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Como puede ver, las formas plurales están separadas por un |
.
Ahora, ¿qué pasa si necesitamos múltiples formas plurales?
Esto también es posible:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
En este caso, permitimos números 0
, 1
Y 2
a 19
, y finalmente de 20 en adelante. Por supuesto, puede agregar tantas reglas como necesite.
Entonces, ¿qué pasa si queremos los marcadores de posición en nuestras formas plurales?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
También podemos usar el conteo pasado en `trans_choice` si es necesario usando un marcador de posición :count
especial:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Finalmente, no olvide actualizar sus archivos de traducción con cualquier cambio que haya realizado en la traducción base.
italiano:
{
"Welcome to our website, :Name": "Benvenuto nel nostro sito, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Nessuna mela|{1} C'è:count mela|[2,19] Ci sono :count mele"
}
Francés:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Il n'y a pas de pommes|{1} Il n'y :form :count pomme|[2,19] Il y :form :count pommes"
}
Para localizar fechas, aprovecharemos el poder de Carbono , que viene con Laravel por defectodefinita. Revisar la Documentación de carbono ; Puedes hacer muchas cosas interesantes. Por ejemplo, podemos establecer nuestra configuración regional con reglas de fecha y hora.
Para nuestro ejemplo simple, mostraremos la fecha actual localizada para el idioma seleccionado. En nuestro routes/web.php
, actualizamos la ruta de la página de bienvenida y pasamos el mensaje de fecha localizado a la nuestra view
bienvenido:
<?php
Route::get('/', function () {
$today = \Carbon\Carbon::now()
->settings(
[
'locale' => app()->getLocale(),
]
);
// LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
$dateMessage = $today->isoFormat('dddd, LL');
return view('welcome', [
'date_message' => $dateMessage
]);
});
actualicemos resources/views/welcome.blade.php
agregando visualización de fecha, así:
{{ __('Welcome to our website, :Name', ['name' => 'amanda']) }}
<br>
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}
Intentando cambiar el idioma en la página de inicio de localhost
, veremos que las fechas ahora están localizadas, por ejemplo:
En diferentes países, las personas usan diferentes formatos para representar números, por ejemplo:
Por lo tanto, para reflejar estas diferencias en su aplicación Laravel, puede usar Formateador de números de la siguiente manera:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
También puede escribir el número en un idioma en particular y mostrar algo como “ciento veintitrés mil ciento veintitrés punto uno dos”:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Además, NumberFormatter te permite localizar monedas fácilmente, por ejemplo:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Así que para fr
verás Euros, mientras que para en_US
la moneda será en dólares estadounidenses.
Ercole Palmeri
Microsoft Excel es la herramienta de referencia para el análisis de datos, porque ofrece muchas funciones para organizar conjuntos de datos,…
Walliance, SIM y plataforma líder en Europa en el campo del Crowdfunding Inmobiliario desde 2017, anuncia la finalización…
Filament es un marco de desarrollo "acelerado" de Laravel que proporciona varios componentes completos. Está diseñado para simplificar el proceso de...
«Debo volver para completar mi evolución: me proyectaré dentro del ordenador y me convertiré en energía pura. Una vez instalado…
Google DeepMind presenta una versión mejorada de su modelo de inteligencia artificial. El nuevo modelo mejorado proporciona no sólo...
Laravel, famoso por su sintaxis elegante y potentes funciones, también proporciona una base sólida para la arquitectura modular. Allá…
Cisco y Splunk están ayudando a los clientes a acelerar su viaje hacia el Centro de Operaciones de Seguridad (SOC) del futuro con...
El ransomware ha dominado las noticias durante los últimos dos años. La mayoría de la gente sabe muy bien que los ataques...