Когда дело доходит до локализации в веб-приложениях, способность поддерживать несколько языков и адаптироваться к региональным предпочтениям имеет решающее значение. Давайте сравним Express.js, PHP Laravel и Total.js с точки зрения их возможностей локализации:
Обзор
Экспресс.js:
Express.js — это минималистичный фреймворк для веб-приложений для Node.js. Хотя он не предоставляет встроенных функций локализации, он предлагает гибкую среду для реализации локализации в вашем приложении. Express.js можно комбинировать с различными библиотеками и инструментами для достижения функциональности локализации, такими как i18n, i18next или пользовательское промежуточное ПО.
Плюсы:
- Гибкость выбора из нескольких библиотек локализации.
- Позволяет настраивать и внедрять на основе конкретных требований проекта.
- Хорошо интегрируется с другими библиотеками и инструментами Node.js.
Минусы:
- Требует дополнительной настройки и настройки для локализации.
- Отсутствие встроенных функций локализации увеличивает усилия разработчиков.
- Использование внешних библиотек может привести к проблемам с совместимостью или обслуживанием.
Пример
Предположим, у вас есть приложение Express.js для пользовательского приложения CRUD (создание, чтение, обновление, удаление) и вы хотите продемонстрировать локализацию представлений. Вот пример того, как вы можете реализовать локализацию в Express.js:
1. Установите необходимые зависимости:
npm install express i18n
2. Создайте папку с именем locales в корневом каталоге вашего проекта.
В папке «locales» создайте файлы JSON для каждого поддерживаемого языка. Например, создайте en.json
для английского языка и fr.json
для французского. Эти файлы будут содержать пары ключ-значение для переведенных строк.
en.json:
{ "welcome": "Welcome to the User CRUD App!", "create": "Create User", "read": "Read User", "update": "Update User", "delete": "Delete User" }
fr.json:
{ "welcome": "Bienvenue dans l'application CRUD utilisateur !", "create": "Créer un utilisateur", "read": "Lire un utilisateur", "update": "Mettre à jour un utilisateur", "delete": "Supprimer un utilisateur" }
3. Настройте Express.js и промежуточное ПО локализации в вашем app.js
или основном файле приложения:
const express = require('express'); const i18n = require('i18n'); const app = express(); // Localization middleware i18n.configure({ locales: ['en', 'fr'], // Supported languages directory: __dirname + '/locales', // Path to language files defaultLocale: 'en', // Default language cookie: 'lang', // Cookie name to store the selected language }); app.use(i18n.init); // Set up views directory and templating engine (e.g., using EJS) app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); // Routes app.get('/', (req, res) => { res.render('index'); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
4. Создайте файл index.ejs
в папке «views» со следующим содержимым:
<!DOCTYPE html> <html lang="<%= res.locale %>"> <head> <meta charset="UTF-8"> <title>User CRUD App</title> </head> <body> <h1><%= res.__('welcome') %></h1> <ul> <li><a href="/create"><%= res.__('create') %></a></li> <li><a href="/read"><%= res.__('read') %></a></li> <li><a href="/update"><%= res.__('update') %></a></li> <li><a href="/delete"><%= res.__('delete') %></a></li> </ul> </body> </html>
5. Запустите свой сервер Express.js:
node app.js
Теперь, когда вы открываете http://localhost:3000
в своем браузере, представление будет отображать локализованные строки на основе выбранного языка. Вы можете переключаться между языками, установив файл cookie lang
с кодом нужного языка («en» для английского или «fr» для французского).
В этом примере демонстрируется базовая реализация локализации в представлении Express.js для пользовательского приложения CRUD. Вы можете распространить этот подход на другие представления и маршруты в вашем приложении и добавить дополнительные языковые файлы для поддержки дополнительных языков.
PHP Ларавель:
Laravel — это популярный PHP-фреймворк, предлагающий всестороннюю поддержку локализации «из коробки». Он предоставляет такие функции, как файлы перевода, помощники по локализации и автоматическое определение языка. Возможности локализации Laravel основаны на стандартной инфраструктуре Gettext и обеспечивают простой и эффективный способ обработки переводов.
Плюсы:
- Встроенная поддержка локализации с файлами перевода и языковыми файлами.
- Предоставляет помощники по переводу и удобные функции локализации.
- Автоматическое определение языка на основе пользовательских предпочтений или настроек браузера.
Минусы:
- Требуется знакомство с синтаксисом и соглашениями локализации Laravel.
- Ограничено приложениями на основе PHP.
- Требуется сервер с поддержкой PHP.
Пример
Вот пример того, как вы можете реализовать локализацию в Laravel для пользовательского CRUD-приложения:
1. Настройте локализацию Laravel:
Откройте файл config/app.php
и убедитесь, что для параметра locale
задан язык по умолчанию, который вы хотите использовать. Например:
'locale' => 'en',
2. Создайте языковые файлы:
Laravel использует языковые файлы для хранения переводов. Внутри каталога resources/lang
создайте папку для каждого языка, который вы хотите поддерживать (например, en
для английского и fr
для французского). Внутри каждой языковой папки создайте файл с именем messages.php
.
resources/lang/en/messages.php:
<?php return [ 'welcome' => 'Welcome to the User CRUD App!', 'create' => 'Create User', 'read' => 'Read User', 'update' => 'Update User', 'delete' => 'Delete User', ];
resources/lang/fr/messages.php:
<?php return [ 'welcome' => 'Bienvenue dans l\'application CRUD utilisateur !', 'create' => 'Créer un utilisateur', 'read' => 'Lire un utilisateur', 'update' => 'Mettre à jour un utilisateur', 'delete' => 'Supprimer un utilisateur', ];
3. Используйте локализацию в представлении:
Откройте пользовательский файл представления CRUD (например, resources/views/users/index.blade.php
) и используйте вспомогательную функцию trans()
для отображения переведенных строк.
<!DOCTYPE html> <html lang="{{ app()->getLocale() }}"> <head> <meta charset="UTF-8"> <title>User CRUD App</title> </head> <body> <h1>{{ trans('messages.welcome') }}</h1> <ul> <li><a href="/create">{{ trans('messages.create') }}</a></li> <li><a href="/read">{{ trans('messages.read') }}</a></li> <li><a href="/update">{{ trans('messages.update') }}</a></li> <li><a href="/delete">{{ trans('messages.delete') }}</a></li> </ul> </body> </html>
4. Обновляйте язык динамически:
Чтобы пользователи могли переключаться между языками, вы можете добавить в представление ссылки для выбора языка или раскрывающееся меню. Например, вы можете создать раскрывающееся меню выбора языка, которое отправляет запрос POST на маршрут, например /language
, для обновления языка:
<form action="/language" method="POST"> @csrf <select name="locale" onchange="this.form.submit()"> <option value="en" {{ app()->getLocale() === 'en' ? 'selected' : '' }}>English</option> <option value="fr" {{ app()->getLocale() === 'fr' ? 'selected' : '' }}>French</option> </select> </form>
5. Добавьте маршрут для обработки переключения языков:
В вашем файле маршрутов web.php
добавьте маршрут для обработки запроса на переключение языка:
Route::post('/language', function (Illuminate\Http\Request $request) { $request->validate([ 'locale' => 'required|string|in:en,fr', ]); session(['locale' => $request->locale]); return redirect()->back(); });
6. Запустите сервер разработки Laravel:
Запустите следующую команду в каталоге вашего проекта:
php artisan serve
Теперь, когда вы получаете доступ к представлению своего пользовательского приложения CRUD, строки будут отображаться на выбранном языке. При изменении выбора языка представление будет обновляться соответствующим образом.
В этом примере демонстрируется базовая реализация локализации в Laravel для представления пользовательского приложения CRUD. Вы можете расширить это, применяя локализацию к другим представлениям, добавляя больше языков и используя более продвинутые функции, предоставляемые системой локализации Laravel.
Итого.js:
Total.js — это полнофункциональная среда JavaScript, которую можно использовать для разработки веб-приложений, особенно приложений реального времени и/или приложений на основе микросервисов. Когда дело доходит до локализации, у него также есть встроенные функции локализации, такие как Laravel, но более продвинутые и чрезвычайно быстрые. Вот некоторые преимущества Механизма локализации Total.js.
- Отличный и гениальный механизм локализации.
- отсутствие зависимости
- Вы можете сгенерировать словарь локализации непосредственно из исходного кода.
- Предлагает гибкость для создания и обновления словаря перевода через интерфейс командной строки.
- Платформа локализует представления и статические файлы .html во время компиляции, поэтому она быстро обрабатывается.
- Каждый переведенный вид хранится в памяти
- Локализация применяется ко всем статическим файлам
.html
иviews
- Текст для перевода заключен в разметку
@(Text to translate)
Инициализация
Чтобы инициализировать локализацию, вам необходимо зарегистрировать делегата локализации, который получает язык из запроса.
/definitions/localization.js
:
LOCALIZE(function(req, res) { // if "query.language" will be undefined then the framework uses default resource return req.query.language; });
- также язык можно изменить в
controller.language = 'en'
Файлы языковых ресурсов (словари)
Сначала установите Total.js как глобальный модуль через $ npm install -g total4
, потому что NPM регистрирует инструменты командной строки Total.js и помощники терминала.
- Создание файла ресурсов
Откройте терминал и напишите:
$ cd myapp $ total4 --translate
- Вывод будет таким:
// Total.js translation file // Created: 2020-12-04 10:32 // index.html T1c4854 : Title T1y5ksfx : Hello world! Tpfol3 : Total.js is web application framework for Node.js // IMPORTANT: This line was created manually message : Direct reading
Total.js находит все тексты для перевода и создает файл ресурсов translate.resource для перевода. Ключи в файле ресурсов представляют собой хэши из-за производительности и потребления памяти. Скопируйте файл: /resources/fr.resource и переведите его, например:
// Total.js translation file // Created: 2020-12-04 10:32 // index.html T1c4854 : Titre T1y5ksfx : Bonjour tout le monde! Tpfol3 : Total.js est un framework web pour Node.js // IMPORTANT: This line was created manually message : Lecture direct
Локализация в представлениях
@{meta('@(Title)')} <h1>@(Hello world!)</h1> <p>@(Total.js is web application framework for Node.js)</p> <!-- READS THE TITLE DIRECTLY FROM THE RESOURCE FILE --> <!-- YOU CAN USE OWN CUSTOM KEY --> <div>@(#message) or @(#T1c4854) is same as @(Title) (read below)</div>
Применение
Запустите приложение $ node index.js
и посетите:
http://127.0.0.1:8000/:
... ... <title>Title</title> ... ... <h1>Hello world!</h1> <p>Total.js is web application framework for Node.js</p> <div>Direct reading or Title is same as Title (read below)</div> ... ...
http://127.0.0.1:8000/?language=fr:
... ... <title>Titre</title> ... ... <h1>Bonjour tout le monde</h1> <p>Total.js je webový framework pre Node.js</p> <div>La lecture directe est la meme que le Titre</div> ... ...
Пример
Создать приложение
Давайте создадим проект и установим Total.js
mkdir users-crud && cd users-crud npm init -y npm install total4
- создать index.js
// /index.js require('total4/debug')({ port: 5000 });
Инициализировать обработчик локализации
Локализация может быть объявлена в файле определения
// /definitions/localization.js // via LOCALIZE(fn); LOCALIZE(function (req, res) { var lang = 'en'; // default // From connected user session // if (req.user) // lang = req.user.language // From query params if (req.query.language) lang = req.query.language return lang; });
Создание конечных точек в контроллере
// /controllers/default.js exports.install = function() { ROUTE('GET /', home); }; function home() { var self = this; self.view('index'); }
Создание представлений
@{layout('')} <!DOCTYPE html> <html lang="@{controller.language}"> <head> <meta charset="UTF-8"> <title>@(Title)</title> </head> <body> <h1>@(Welcome to the users page)</h1> <ul> <li><a href="/create">@(Create)</a></li> <li><a href="/read">@(Read)</a></li> <li><a href="/update">@(Update)</a></li> <li><a href="/delete">@(Delete)</a></li> </ul> </body> </html>
Создание файлов локализации
Не забудьте сначала установить Total.js как глобальный модуль $ npm install -g total4
, потому что NPM регистрирует помощники терминала/командной строки Total.js.
Создание файла ресурсов
Откройте терминал и напишите:
$ cd users-crud $ total4 --translate
Вывод будет:
// /transalate.resource // Total.js translation file // Created: 2023-07-06 02:08 // views/index.html T1c4854 : Title T10fad25 : Welcome to the users page Txijsik : Create T1ii7q : Read T1608rft : Update Txskn2j : Delete
Содержимое этого /translate.resource
можно перевести на любой язык, который вы хотите.
Просто скопируйте файл /translate.resource
в папку /resources/
.
Пример для французского языка:
Скопируйте /translate.resource
в /resources/fr.resource
и сделайте необходимые переводы.
// Total.js translation file // Created: 2023-07-05 05:02 // views/index.html T1c4854 : Titre T10fad25 : Bienvenu a la page des utilisateurs Txijsik : Creer T1ii7q : Afficher T1608rft : Modifier Txskn2j : Supprimer
Таким образом, в то время как Express.js обеспечивает гибкость для реализации локализации с использованием различных библиотек, Laravel выделяется своей всеобъемлющей встроенной поддержкой локализации. Total.js явно имеет самый продвинутый, полный и быстрый механизм локализации, поскольку он может даже поддерживать запись строки перевода в любом месте исходного кода, таким образом, даже Rest API, вывод ошибок может быть локализован без каких-либо проблем. Но, в конце концов, при выборе платформы для локализации учитывайте конкретные требования вашего проекта, стек разработки и необходимый уровень поддержки локализации.