PHPackages                             ztphp/zt-i18n - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. ztphp/zt-i18n

ActiveLibrary

ztphp/zt-i18n
=============

i18n客户端

v1.2.1(2y ago)05MITPHPPHP ^7.0 || ^8.0

Since Jan 2Pushed 2y ago1 watchersCompare

[ Source](https://github.com/xbyter/zt-i18n)[ Packagist](https://packagist.org/packages/ztphp/zt-i18n)[ RSS](/packages/ztphp-zt-i18n/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (6)Versions (3)Used By (0)

I18n PHP客户端
===========

[](#i18n-php客户端)

安装
==

[](#安装)

1. 从composer拉取包
---------------

[](#1-从composer拉取包)

```
composer require ztphp/zt-i18n
```

2. 执行发布命令，注册artisan命令行和拷贝默认配置文件到config目录
----------------------------------------

[](#2-执行发布命令注册artisan命令行和拷贝默认配置文件到config目录)

```
php artisan vendor:publish --provider="ZtI18n\Laravel\Providers\I18nServiceProvider" --tag=config
```

3. 配置config/i18n.php文件
----------------------

[](#3-配置configi18nphp文件)

```
return [
    //服务端多语言存放目录，用于保存同步i18n服务端多语言
    'server_resource_dir' => storage_path('i18n/json'),
    //本地语言存放目录，用于保存本地的多语言，当服务端找不到key时会调用本地多语言
    'local_resource_dir'  => resource_path('lang'),
    //站点支持的语言
    'languages'           => ['zh-CN', 'en-US'],
    //阿波罗配置，用于从阿波罗里同步多语言
    'apollo'              => [
        //命名空间前缀, 完整的命名空间格式为namespace_prefix + '-' + lang，例如fbg-eld-api-zh-CN
        'namespace_prefix'   => 'fbg-eld-api',
        //阿波罗配置服务器地址
        'config_server_url' => '',
        //阿波罗AppID
        'app_id'            => '',
        //阿波罗集群配置
        'cluster'           => 'default',
        //阿波罗密钥
        'secret'            => '',
    ],
];
```

4. 新增i18n服务感知路由（控制器I18nController返回本地新增的多语言）
--------------------------------------------

[](#4-新增i18n服务感知路由控制器i18ncontroller返回本地新增的多语言)

```
    Route::get('/i18n', 'ZtI18n\Laravel\Controllers\I18nController@newData');
```

功能示例
====

[](#功能示例)

1. 从阿波罗同步数据到本地
--------------

[](#1-从阿波罗同步数据到本地)

```
//只执行一次同步
php artisan zt-i18n:sync -O
//常驻执行同步（配合supervisor使用）
php artisan zt-i18n:sync
//常驻60秒执行同步（配合定时任务使用）
php artisan zt-i18n:sync 60
```

2. 根据Key进行翻译
------------

[](#2-根据key进行翻译)

```
//可以使用{0},{1}等变量，如：product[{0}] not exists
app(I18nClientInterface::class)->get('10101000', ['EL320-SKU001']);

//也可以使用函数来替换上面语句
i('10101000', ['EL320-SKU001']);
```

3. 替换接口实现
---------

[](#3-替换接口实现)

> 如果默认的加载器/存储器不符合项目的要求，可重新实现LoaderInterface, FallbackLoaderInterface等接口，示例可参考：I18nServiceProvider

```
    /**
     * 注册i18n加载器，用于加载多语言数据
     * @return void
     */
    protected function registerLoader()
    {
        $this->app->singleton(LoaderInterface::class, function ($app) {
            $dir = $this->getConfig('i18n.server_resource_dir');
            return new JsonFileLoader($dir);
        });
    }
    /**
     * 注册i18n备用加载器，当默认加载器找不到key时使用备用加载器
     * @return void
     */
    public function registerFallbackLoader()
    {
        $this->app->singleton(FallbackLoaderInterface::class, function () {
            $dir = $this->getConfig('i18n.local_resource_dir');
            return new JsonFileLoader($dir);
        });
    }

    /**
     * 注册i18n客户端
     * @return void
     */
    protected function registerClient()
    {
        $this->app->singleton(I18nClientInterface::class, function () {
            $client = new I18nClient($this->app->make(LoaderInterface::class));
            $client->setFallbackLoader($this->app->make(FallbackLoaderInterface::class));
            $client->setLang($this->app->getLocale());
            return $client;
        });
    }

    /**
     * 注册i18n同步器，同步i18n服务器数据到本地
     * @return void
     */
    protected function registerSync()
    {
        $this->app->singleton(I18nSyncInterface::class, function () {
            $languages = $this->getConfig('i18n.languages');
            $apolloClient = $this->getApolloClient();
            $dir = $this->getConfig('i18n.server_resource_dir');
            $store = new JsonFileStore($dir);

            $sync = new I18nApolloSync($apolloClient, $store);
            $namespacePrefix = $this->getConfig('apollo.namespace_prefix');
            foreach ($languages as $language) {
                $sync->addNamespace($language, "{$namespacePrefix}-{$language}");
            }
            return $sync;
        });
    }
```

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

858d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f99d7f145bf92288181ca5159ca57e88f65eb1bb1a8fcadf85315dfbe662153e?d=identicon)[X-Byter](/maintainers/X-Byter)

---

Top Contributors

[![xbyter](https://avatars.githubusercontent.com/u/12113089?v=4)](https://github.com/xbyter "xbyter (3 commits)")

---

Tags

phptranslator

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ztphp-zt-i18n/health.svg)

```
[![Health](https://phpackages.com/badges/ztphp-zt-i18n/health.svg)](https://phpackages.com/packages/ztphp-zt-i18n)
```

###  Alternatives

[stichoza/google-translate-php

Free Google Translate API PHP Package

2.0k7.6M124](/packages/stichoza-google-translate-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
