定制 neznaika0/codeigniter-lang-finder 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

neznaika0/codeigniter-lang-finder

Composer 安装命令:

composer require neznaika0/codeigniter-lang-finder

包简介

Find the translation keys in your project

README 文档

README

GitHub Release (latest by date) PHP GitHub License Contributions Welcome

Этот пакет предоставляет команды для работы с переводами в CodeIgniter 4, упрощая процесс поиска и обновления языковых ключей. Важно: команда не выполняет автоматический перевод фраз, а лишь помогает организовать и обновить ключи.

В CodeIgniter 4 есть встроенная команда для Генерации переводов. Здесь усовершенствованная версия.

Установка

composer require neznaika0/codeigniter-lang-finder

Обычный процесс разработки

В процессе разработки с использованием переводов в CodeIgniter 4 вы выполняете следующие шаги:

  1. Используете функцию lang() в коде, например:
echo lang('Users.list.title');
echo lang('Users.list.title', ['About'], 'ru');
  1. Создаёте файл app/Language/<locale>/Users.php для каждой доступной локали и прописываете переводы в массив.

Этот подход работает хорошо, если вы сразу добавляете переводы. Однако, если переводы откладываются, могут возникнуть проблемы:

  • Пропуск ключей для перевода.
  • Дублирование существующих ключей.
  • Опечатки в ключах или фразах.
  • Неполное обновление файлов перевода.

Пример использования

Рассмотрим пример на основе следующих данных:

// Локаль по умолчанию в app/Config/App.php
$defaultLocale = 'ru';

// Доступные локали в app/Config/App.php
$supportedLocales = ['en', 'ru', 'de'];

// Файл app/Controllers/Translation/Lang.php
$message  = lang('Text.info.success');
$message2 = lang('Text.paragraph');
$message3 = lang('Text.expired', ['2025-01-01']);
$message4 = lang('Text.created', ['date' => 'yesterday'], 'de');

// Изначальный массив с переводом app/Language/ru/Text.php
return [
    'created' => 'Создано {date}',
    'expired' => 'Завершено {0}',
    'info'    => [
        'success' => 'Успешно!',
    ],
    'paragraph' => 'Привет, Мир!',
];

lang:finder Поиск новых и обновление старых переводов.

Вы можете автоматически генерировать и обновлять файлы перевода вашего приложения. Команда будет искать использование функции lang(), объединять текущие ключи перевода в выбранной директории Language, определяя локаль defaultLocale из Config\App.

После операции вам необходимо перевести языковые ключи самостоятельно. Команда умеет распознавать ключи File.array.nested.text, создавая многомерные массивы внутри файла с переводом.

При сканировании директория Language, в которой хранятся файлы перевода, будет пропущена. Рассчитано, что они не имеют внутри себя lang()

Ранее сохраненные ключи как и сортировка не изменяются. Новые ключи добавляются в конец массива.

В случае базовой установки CodeIgniter 4 вы можете запустить:

php spark lang:finder

это аналогично команде:

php spark lang:finder --locale ru --dir ./app/ --lang-dir ./app/Language/

В результате выполнится поиск языковых ключей в директории APPPATH (./app/), создастся или обновится массив в файлах перевода в APPPATH/Language/ (./app/Language/).

Так как файл ./app/Language/ru/Text.php уже содержит массив со всеми переводами, то значения останутся без изменений.

Указав другие данные (локаль или папку для сохранения), создаётся новый файл <lang-dir>/<locale>/Text.php с массивом:

<?php

return [
    'info' => [
        'success' => 'Text.info.success',
    ],
    'paragraph' => 'Text.paragraph',
    'expired' => 'Text.expired...{0}',
    'created' => 'Text.created...{date}',
];

Добавив новые переводы в исходный код:

$obj       = new \stdClass();
$obj->desc = 'Описание страницы';
$message4  = lang('Text.meta.desc', $obj->desc ?? ['Неясное описания']);

вы обновите файл:

<?php

return [
    'info' => [
        'success' => 'Text.info.success',
    ],
    'paragraph' => 'Text.paragraph',
    'expired' => 'Text.expired...{0}',
    'created' => 'Text.created...{date}',
    'meta' => [
        'desc' => 'Text.meta.desc...{?}',
    ],
];

Параметры запуска

--locale Укажите доступную локаль для сохранения.

--dir Директория для сканирования кода отсносительно ROOTPATH. По умолчанию APPPATH.

--lang-dir Директория, в которую сохранятся файлы перевода. По умолчанию APPPATH/Language/.

--show-new Показать в консоли новые ключи перевода без их записи.

--verbose Подробный вывод процесса команды.

--help Описание команды

Полный пример команды:

php spark lang:finder --locale de --dir ./app/Modules/ --lang-dir ./app/Modules/Language --verbose --show-new

Заполнители

Для понимания следующего прочтите документацию Замена параметров

Подсказка в конце фразы - заполнители, динамические данные которые можно подставить из кода. Поддерживаются типы:

  • {число} - числовой индекс
  • {строка} - строковой ключ
  • {?} - неопределенный тип

Видя, их количество и тип, по возможности, вам необходимо в нужном месте перевода подставить заполнитель. {?} лишь намекает, что некоторый параметр передан, но это не строка или число, скорее объект или сложное выражение.

В большинстве случаев стоит проверить какие данные передаются.

При большом количестве ключей, вы можете ошибиться и передать для перевода разные заполнители: в одном месте как числовой индекс {1}, в другом как строковой ключ {name}. Посмотрев на сгенерированный массив вы можете обнаружить такое несоответствие и исправить его.

Возможности

  • Сканирование всех .php файлов в указанной директории.
  • Указание директорий для поиска и сохранения.
  • Существующие переводы остаются без изменений.
  • Новые ключи для перевода добавляются в конец, если перевод уже существует.
  • Создание многомерных массивов, если ключ содержит точки.
  • Автоматическое добавление заполнителей для фраз {int} - числовой индекс, {string} - строковой ключ, {?} - неопределенный тип.
  • Поддержка Unicode
  • Работа только с поддерживаемыми локалями

Особенности и ограничения

  • Для поиска требуется библиотека nikic/php-parser. Обычно она нужка только для разработки, но здесь это прямая зависимость.
  • После выполнения возможно понадобится форматирование, например, php-cs-fixer. Формат сохранения массива не настраивается, по умолчанию return [].
  • Файлы переводов полностью перезаписываются. Если вы используете форматирование или комментарии, они могут быть потеряны. Следует проверять на соответствие вашему стилю.
  • Если перевод File.text...{0} или Ваше имя {name} имеет подсказку типа, то при новом заполнителе он не обновится. Если вы еще не переводили файл, перед повторным запуском команды можете его удалить.

Помощь

Если вы нашли ошибки или есть предложения по улучшению, можете отправить PR или открыть Проблему.

neznaika0/codeigniter-lang-finder 适用场景与选型建议

neznaika0/codeigniter-lang-finder 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2 次下载、GitHub Stars 达 2, 最近一次更新时间为 2025 年 02 月 04 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 neznaika0/codeigniter-lang-finder 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 neznaika0/codeigniter-lang-finder 我们能提供哪些服务?
定制开发 / 二次开发

基于 neznaika0/codeigniter-lang-finder 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 2
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 8
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-02-04