highsolutions / laravel-translation-manager
管理Laravel翻译
Requires
- php: >=5.4.0
- illuminate/console: 5.*|^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/support: 5.*|^6.0|^7.0|^8.0|^9.0|^10.0
- symfony/finder: *
This package is auto-updated.
Last update: 2024-09-22 15:01:04 UTC
README
轻松管理Laravel中的翻译。
安装
将以下行添加到您的Laravel webapp的composer.json
文件的require
部分
"require": { "highsolutions/laravel-translation-manager": "^1.0" }
运行composer update
以安装包。
然后,通过添加服务提供者条目来更新config/app.php
'providers' => [ // ... HighSolutions\TranslationManager\ManagerServiceProvider::class, ];
接下来,发布所有包资源
php artisan vendor:publish --provider="HighSolutions\TranslationManager\ManagerServiceProvider"
这将添加到您的项目中
- migration - database table for storing translations
- configuration - package configurations
- views - configurable views for translation management
- translations - translations for webinterface
请记住运行迁移
php artisan migrate
工作流程
此包不替换翻译系统,仅将PHP文件导入/导出到数据库,并在浏览器中使其可编辑。包包含用于在网站上实时编辑内容的辅助工具。
工作流程将是
- Import translations: Read all translation files and save them in the database
- Find all translations in php/twig sources
- Optionally: Listen to missing translation with the custom Translator
- Optionally: Mark not-translated records as not-translated (suffix command)
- Translate all keys through the webinterface
- Export: Write all translations back to the translation files.
用法
您可以在默认配置下通过http://yourdomain.com/translations
访问包。您可以根据需要更改它。
配置
命令
导入命令
导入命令将遍历app/lang并在数据库中加载所有字符串,因此您可以轻松管理它们。
php artisan translations:import
注意:默认情况下,仅添加新字符串。数据库中已存在的翻译将保持不变。如果您想用文件中的值替换所有值,请添加--replace
(或-R
)选项:php artisan translations:import --replace
在源代码中查找翻译
查找命令/按钮将搜索app目录下的所有php/twig文件,以查看它们是否包含翻译函数,并将尝试提取组/项目名称。找到的键将被添加到数据库中,以便可以轻松翻译。这可以通过Web界面或Artisan命令完成。
php artisan translations:find
导出命令
导出命令将数据库内容写回到资源/lang php文件。这将覆盖现有的翻译并删除所有注释,因此在使用之前请确保备份您的数据。提供组名以定义您要发布的组。如果您想导出所有组,请提供*
作为组名。
php artisan translations:export <group>
例如,当您有两个区域(en/pl)时,使用php artisan translations:export reminders
将写入resources/lang/en/reminders.php
和resources/lang/pl/reminders.php
清理命令
清理命令将搜索所有为NULL的翻译并删除它们,从而使您的界面更干净。注意:空翻译永远不会导出。
php artisan translations:clean
重置命令
重置命令简单地清除数据库中的所有翻译,以便您可以从头开始(通过新的导入)。在执行此操作之前,请确保需要时导出您的工作。
php artisan translations:reset
克隆命令
克隆命令将基本语言(langFrom参数)的目录复制并保存为新语言(langTo参数)。在此操作之后,您需要运行导入命令。
php artisan translations:clone langFrom langTo
后缀命令
后缀命令分析新区域(langNew参数)的所有翻译,如果值与原始语言(langOriginal参数)相同,则将后缀添加到新区域翻译的末尾,以标记该翻译需要翻译。后缀是区域代码(例如EN)的大写。
php artisan translations:sufix langOriginal langNew
检测缺失的翻译
大多数翻译可以通过使用查找命令(见上面)找到,但在您有动态键(变量/自动表单等)的情况下,监听缺失的翻译可能会有所帮助。要检测缺失的翻译,我们可以用自定义提供程序替换Laravel TranslationServiceProvider。在您的config/app.php中,取消注释原始TranslationServiceProvider并添加此包中的一个
//'Illuminate\Translation\TranslationServiceProvider', 'HighSolutions\TranslationManager\TranslationServiceProvider',
这将为翻译器扩展功能,并在找不到键时创建一个新的数据库条目,因此您必须访问使用它们的页面。这样,它就会显示在Web界面中,可以编辑并稍后导出。您不应该在生产环境中使用此功能,仅在生产环境中翻译视图,然后只需切换回来。
实时编辑
当数据库中有翻译时,您可以在适合的情况下使用transEditable
方法而不是trans
。为此,您需要执行几个步骤
通过添加服务提供者的条目来更新config/app.php
'providers' => [ // ... HighSolutions\TranslationManager\TranslationServiceProvider::class, ];
将这些两个方法添加到app\helpers.php
文件中。
if (!function_exists('transEditable')) { /** * Translate the given message and wraps it in .editable container to allow editing * * @param string $id * @param array $parameters * @param string $domain * @param string $locale * @return \Symfony\Component\Translation\TranslatorInterface|string */ function transEditable($id = null, $parameters = [], $domain = 'messages', $locale = null) { return app('translator')->transEditable($id, $parameters, $locale); } } if (!function_exists('isLiveTranslationEnabled')) { /** * Return true if live translation enabled * * @return bool */ function isLiveTranslationEnabled() { return Request::cookie('live-translation-enabled') || config('translation-manager.live_translation_enabled'); } }
在您的布局视图中添加这些脚本和样式(参见布局自定义部分)
<link href="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/bootstrap3-editable/css/bootstrap-editable.css" rel="stylesheet"/> <style> .editable-click { border-bottom-color: red; cursor: pointer; } .editableform .control-group { display: block; } .editable-input { display: block; } .editable-input > textarea { width: 100% !important; } .editable-buttons { margin: 10px 0 0; text-align: right; width: 100%; } .editable-buttons .editable-submit { float: right; margin-left: 10px; } </style> // ... <script src="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/bootstrap3-editable/js/bootstrap-editable.min.js"></script>
如果您想将所有链接都转换为非链接,请添加此小脚本
<script>
$('.editable').parent('a').replaceWith(function () {
return $('<div/>', {
html: this.innerHTML
});
}
);
</script>
最后一步是添加此JS文件
jQuery(document).ready(function($){
$.ajaxSetup({
beforeSend: function(xhr, settings) {
settings.data += "&_token=" + $(':hidden[name="_token"]').val();
}
});
$('.editable').editable().on('hidden', function(e, reason){
var locale = $(this).data('locale');
if(reason === 'save'){
$(this).removeClass('status-0').addClass('status-1');
}
if(reason === 'save' || reason === 'nochange') {
var $next = $(this).closest('tr').next().find('.editable.locale-'+locale);
setTimeout(function() {
$next.editable('show');
}, 300);
}
});
$(document).on('click', 'a', function(event) {
if (event.target.localName !== 'a' && event.target.className.indexOf('editable-submit') !== -1) {
event.preventDefault();
return false;
}
});
});
现在您可以使用transEditable
辅助工具,当实时编辑处于活动状态(通过isLiveTranslationEnabled
进行检查)时,用户可以点击文本,将显示弹出窗口,并且可以更改文本。保存更改将导致将文本保存到数据库并将文本导出到翻译文件。如果实时编辑未激活,用户将看到标准文本。
您可以使用此辅助工具如下
<div class="text">{!! transEditable('auth.failed') !!}</div>
不要在非可点击元素(title属性、alt属性等)中使用此功能。要启动链接内的弹出窗口,请点击边框,而不是文本。
更新日志
1.3.0
- 支持Laravel 11.x
1.2.0
- 支持Laravel 9.x和10.x
1.1.0
- 支持Laravel 7.x和8.x
1.0.0
- 支持Laravel 6.0
0.6.0
- 不再需要STRICT_MODE了
0.5.1
- 修复搜索翻译
0.5.0
- 更改视图路径
0.4.7
- 在配置文件中删除闭包
0.4.5
- Laravel 5.6支持
0.4.4
- 修复翻译标题弹出窗口
0.4.3
- 新增配置(弹出位置和基本语言)
- 更新有关必要JS脚本的文档
0.4.0
- 新增命令:克隆和后缀
- 改进导出命令
0.3.7
- 新增排除语言配置选项
0.3.6
- 支持自动发现和Laravel 5.5
0.3.0
- 支持子目录
- 支持数组翻译
- 新设计
- 权限管理
- 视图翻译
- 实时编辑
0.2.0
- Barryvdh版本的包
路线图
- 将一个区域的翻译复制到另一个区域,使用区域后缀。
- 检测不正确的文件。
- 支持供应商的翻译文件。
- 单元测试!
致谢
此包最初由Barry vd. Heuvel创建,可在以下位置找到:laravel-feed。
目前由HighSolutions开发,这是一家来自波兰的软件公司,热爱Laravel。