thepinecode/i18n 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

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

thepinecode/i18n

最新稳定版本:v1.6.0

Composer 安装命令:

composer create-project thepinecode/i18n

包简介

Push your translations to the front-end.

README 文档

README

Push your Laravel translations to the front-end and use them easily with JavaScript.

A nice tool for SPAs and front-end heavy applications.

If you have any question how the package works, we suggest to read this post: Using Laravel’s Localization in JS.

Getting started

You can install the package with composer, running the composer require conedevelopment/i18n command.

Translations in view files

You can use the @translations blade directive. This directive automatically wraps the translations to a <script> tag.

@translations

<!-- The result -->
<script>window['translations'] = { auth: {...}, validation: {...} }</script>

You may override the default key for the translations. You can do that by passing a string to the blade directive.

@translations ('myTranslations')

<!-- The result -->
<script>window['myTranslations'] = { auth: {...}, validation: {...} }</script>

Publishing and using the JavaScript library

Use the php artisan vendor:publish command and choose the Pine\I18n\I18nServiceProvider provider. After publishing you can find your fresh copy in the resources/js/vendor folder.

Using the I18n.js

Then you can import the I18n class and assign it to the window object.

import I18n from './vendor/I18n';
window.I18n = I18n;

Initializing a translation instance

From this point you can initialize the translation service anywhere from your application.

let translator = new I18n;

By default, it uses the translations key in the window object. If you want to use the custom one you set in the blade directive, pass the same key to the constructor.

let translator = new I18n('myTranslations');

Using it as a Vue service

If you want to use it from Vue templates directly you can extend Vue with this easily.

Vue.prototype.$I18n = new I18n;

You can call it from your template or the script part of your component like below:

<template>
    <div>{{ $I18n.trans('some.key') }}</div>
</template>
computed: {
    translations: {
        something: this.$I18n.trans('some.key')
    }
}

Methods

The package comes with two methods on JS side. The trans() and the trans_choice().

trans()

The trans method accepts the key of the translation and the attributes what we want to replace, but it's optional.

translator.trans('auth.failed');

// These credentials do not match our records.

translator.trans('auth.throttle', { seconds: 60 });

// Too many login attempts. Please try again in 60 seconds.

trans_choice()

The trans_choice method determines if the translation should be pluralized or nor by the given cout. Also, it accepts the attributes we want to replace.

Let's say we have the following translation line:

[
    'attempts' => 'Be careful, you have :attempts attempt left.|You still have :attempts attempts left.',
]

Note

The plural and the singular versions are separated by the | character!

translator.trans_choice('auth.attempts', 1, { attempts: 'only one' });

// Be careful, you have only one attempt left.

translator.trans_choice('auth.attempts', 4, { attempts: 'less than five' });

// You still have less than five attempts left.

Like in Laravel, you have the ability to set ranges for the pluralization. Also, you can replace placeholders like before.

[
    'apples' => '{0} There are none|[1,19] There are some (:number)|[20,*] There are many (:number)',
]

You can separate more than two choices with the | character.

translator.trans_choice('messages.apples', 0);

// There are none

translator.trans_choice('auth.attempts', 8, { number: 8 });

// There are some (8)

translator.trans_choice('auth.attempts', 25, { number: 25 });

// There are many (25)

Transforming replacement parameters

Like in Laravel's functionality, you can transform your parameters to upper case, or convert only the first character to capital letter. All you need to do, to modify your placeholders.

[
    'welcome' => 'Welcome, :NAME',
    'goodbye' => 'Goodbye, :Name',
]

If you want, you can pass the same parameter with different modifiers in one line as well, like :NAME, :name or :Name.

translator.trans('messages.welcome', { name: 'pine' });

// Welcome, PINE

translator.trans('messages.goodbye', { name: 'pine' });

// Goodbye, Pine

Package translations

Thanks to the idea of Jonathan, package translations are supported by default. You can access to the translations as in Laravel, using the predefined namespace.

translator.trans('courier::messages.message');

Multiple locales

Multiple locales are supported. You can change the application's locale anytime. Behind the scenes the proper translations will be rendered, if it exists.

Fallback locales

If there are no translations is not available in the current language, the package will look for the fallback locale's translations. If there is no translations available in the fallback locale, the missing translations won't appear.

Performance

The translations are generated when the views are compiled. It means they are cached and stored as strings in the compiled views. It's much more performance friendly than generating them on runtime or running and AJAX request to fetch the translations.

Behind the scenes there is a switch - case that determines which translations should be present, based on the current locale. This way only the current translations are pushed to the window object and not all of them.

Note: On local environment the cached views are getting cleared to keep translations fresh.

Contribute

If you found a bug or you have an idea connecting the package, feel free to open an issue.

thepinecode/i18n 适用场景与选型建议

thepinecode/i18n 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 28.62k 次下载、GitHub Stars 达 128, 最近一次更新时间为 2017 年 10 月 31 日, 在 PHP 生态内属于活跃度较高的组件。

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

围绕 thepinecode/i18n 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

  • 总下载量: 28.62k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 128
  • 点击次数: 12
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 128
  • Watchers: 4
  • Forks: 22
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-10-31