Я боровся з цим питанням вже досить багато місяців, але раніше не опинився в ситуації, що мені потрібно було вивчити всі можливі варіанти. Зараз я відчуваю, що настав час познайомитися з можливостями та створити власні особисті переваги, які я можу використовувати в своїх майбутніх проектах.
Дозвольте спершу накреслити ситуацію, яку я шукаю
Я збираюся оновити / переробити систему управління вмістом, яку я використовую вже досить давно. Однак, я вважаю, що багатомовна мова - це велике вдосконалення цієї системи. До цього я не використовував жодних фреймворків, але збираюся використовувати Laraval4 для майбутнього проекту. Laravel здається найкращим вибором більш чистого способу кодування PHP. Sidenote: Laraval4 should be no factor in your answer
. Я шукаю загальні способи перекладу, які не залежать від платформи / фреймворку.
Що треба перекласти
Оскільки система, яку я шукаю, повинна бути максимально зручною для користувача, метод управління перекладом повинен знаходитися всередині CMS. Не слід запускати FTP-з'єднання для зміни файлів перекладу або будь-яких шаблонів, розроблених html / php.
Крім того, я шукаю найпростіший спосіб перекласти декілька таблиць баз даних, можливо, без необхідності робити додаткові таблиці.
Що я придумав сам
Як я вже шукав, читав і пробував речі. У мене є пара варіантів. Але я все ще не відчуваю, що я досяг найкращого методу практики того, чого насправді прагну. Зараз це те, що я придумав, але у цього методу є і його побічні ефекти.
- PHP Parsed Templates : система шаблонів повинна бути проаналізована PHP. Таким чином я можу вставляти перекладені параметри в HTML без необхідності відкривати шаблони та змінювати їх. Крім того, PHP-шаблони для розбору дають мені можливість мати 1 шаблон для повного веб-сайту замість того, щоб мати підпапки для кожної мови (що я мав раніше). Методом досягнення цієї мети може бути Smarty, TemplatePower, Blade Laravel або будь-який інший аналізатор шаблонів. Як я вже сказав, це має бути незалежним від письмового рішення.
- База даних : можливо, мені це не потрібно більше згадувати. Але рішення повинно керуватися базою даних. CMS призначений для об'єктно-орієнтованого та MVC, тому мені потрібно буде продумати логічну структуру даних для рядків. Оскільки мої шаблони будуть структуровані: шаблони / Controller / view.php можливо ця структура має сенс використовувати :
Controller.View.parameter
. У таблиці бази даних ці поля будуть довгими зvalue
полем. Всередині шаблонів ми могли б використовувати якийсь такий метод, якecho __('Controller.View.welcome', array('name', 'Joshua'))
параметрWelcome, :name
. Таким чином, результат єWelcome, Joshua
. Це здається хорошим способом зробити це, оскільки такі параметри, як: ім'я, редактор легко зрозуміти. - Низьке завантаження бази даних : Звичайно, вищевказана система спричинила б завантаження бази даних, якщо ці рядки завантажуються в дорозі. Тому мені знадобиться система кешування, яка відтворює мовні файли, як тільки вони редагуються / зберігаються в середовищі адміністрування. Оскільки генеруються файли, потрібна також хороша компонування файлової системи. Я здогадуюсь, ми можемо піти з
languages/en_EN/Controller/View.php
або .ini, що вам більше підходить. Можливо, .ini зрештою швидше розбирається. Цей вміст повинен містити дані вformat parameter=value;
. Я думаю, що це найкращий спосіб зробити це, оскільки кожен поданий вид може містити власний мовний файл, якщо він існує. Потім параметри мови слід завантажувати в певний вигляд, а не в глобальному масштабі, щоб запобігти перезапису параметрів один одного. - Переклад таблиці баз даних : це насправді найбільше мене хвилює. Я шукаю спосіб створити переклади Новин / Сторінок / тощо. якомога швидше. Наявність двох таблиць для кожного модуля (наприклад,
News
таNews_translations
) - це варіант, але для отримання гарної системи відчувається, що потрібно багато працювати. Одна з речей, яку я придумав, заснована наdata versioning
написаній нами системі: є одна назва таблиці бази данихTranslations
, ця таблиця має унікальне поєднанняlanguage
,tablename
іprimarykey
. Наприклад: en_En / News / 1 (Посилаючись на англомовну версію новинного елемента з ідентифікатором = 1). Але у цього методу є 2 величезні недоліки: по-перше, ця таблиця має тенденцію отримувати досить довго з великою кількістю даних у базі даних, а по-друге, це завдання було б використовувати цю програму для пошуку таблиці. Наприклад, пошук SEO-кулі предмета був би повноцінним текстовим пошуком, який досить німий. Але з іншого боку: це швидкий спосіб створити вміст, що перекладається, в кожній таблиці дуже швидко, але я не вірю, що цей виробник переважає переваги користувачів. - Робота на передній панелі: також передній план потребує певного роздуму. Звичайно, ми би зберігали доступні мови в базі даних та (де) активні ті, які нам потрібні. Таким чином скрипт може генерувати спадне меню для вибору мови, а бек-енд автоматично може вирішити, які переклади можна зробити за допомогою CMS. Вибрана мова (наприклад, en_EN) потім буде використовуватися при отриманні мовного файлу для перегляду або для отримання потрібного перекладу для вмісту на веб-сайті.
Отже, там вони є. Мої ідеї поки що. Вони навіть не включають варіанти локалізації для дат тощо, але оскільки мій сервер підтримує PHP5.3.2 + найкращим варіантом є використання розширення intl, як пояснено тут: http://devzone.zend.com/1500/internationalization-in -php-53 / - але це буде корисно на будь-якому пізнішому стадіоні розвитку. На сьогодні головним питанням є те, як найкращі практики перекладу вмісту на веб-сайті.
Окрім всього, що я тут пояснив, у мене є ще одна річ, яку я ще не вирішив, це виглядає як просте запитання, але насправді це доставляє мені головний біль:
Переклад URL-адрес? Треба робити це чи ні? і яким чином?
Отже .. якщо у мене є такий URL: http://www.domain.com/about-us
і англійська мова є моєю мовою за замовчуванням. Чи слід перетворювати цю URL-адресу, http://www.domain.com/over-ons
коли я обираю голландську мову мовою? Або ми повинні пройти легку дорогу і просто змінити вміст сторінки, яку можна побачити /about
. Останнє, що здається, не є дійсним варіантом, оскільки це призведе до отримання декількох версій однієї URL-адреси, але індексація вмісту не вдасться правильно.
Інший варіант використовується http://www.domain.com/nl/about-us
замість цього. Це створює принаймні унікальну URL-адресу для кожного вмісту. Крім того, було б простіше перейти на іншу мову, наприклад, http://www.domain.com/en/about-us
надану URL-адресу простіше зрозуміти як для відвідувачів Google, так і для людей. Використовуючи цю опцію, що робити з мовами за замовчуванням? Чи повинна мова за замовчуванням видалити вибрану за замовчуванням мову? Тож перенаправлення http://www.domain.com/en/about-us
на http://www.domain.com/about-us
... На мої очі, це найкраще рішення, тому що, коли CMS налаштовується лише на одну мову, немає необхідності мати цю ідентифікацію мови в URL-адресі.
І третій варіант - це комбінація обох варіантів: використання "мови-ідентифікації-менш" -URL ( http://www.domain.com/about-us
) для основної мови. І скористайтеся URL-адресою з перекладеною SEO-слизою для підмовах: http://www.domain.com/nl/over-ons
&http://www.domain.com/de/uber-uns
Я сподіваюсь, що моє запитання тріщить твої голови, вони точно зламали мою! Це мені вже допомогло розібратися, як питання. Дав мені можливість переглянути методи, якими я користувався раніше, і ідею, яку я маю для своєї майбутньої CMS.
Я вже хотів би подякувати вам за те, що ви знайшли час, щоб прочитати цю купу тексту!
// Edit #1
:
Я забув згадати: функція __ () - псевдонім для перекладу заданого рядка. У рамках цього методу, очевидно, має бути якийсь резервний метод, коли текст за замовчуванням завантажується, коли ще не доступні переклади. Якщо переклад відсутній, його слід або вставити, або перекласти файл перекладу.