Laravel 国际化:使用 Localazy 和 GitHub Actions 翻译你的项目

Laravel

任何遇到过一次本地化挑战的开发者都会告诉你,这是一项繁琐的工作。我认为我们可以同意,处理多语言版本并不像在你喜爱的产品中引入新特性那样有趣。我们不仅在讨论国际化,而且还在讨论翻译人员,处理不同的版本,不停地翻译,以及无数次的修改。这就是为什么本地化经常被忽视,并深深地埋在积压的工作中。

如果我们告诉您,您可以使用 LocalazyGitHub Actions 完全自动本地化过程呢? 我们所说的完全是指 完全

什么是 Localazy? Localazy 是一个以开发者为中心构建的完整的本地化套件。 Localazy 允许你完全自动化 Laravel 项目的本地化。 设置一次,永远忘记这些麻烦。

你将学会如何做:

  • 安装 Laravel 框架并运行您的第一个应用,
  • 设置您的 Git 仓库,
  • 准备 Laravel 项目进行本地化,
  • 将其与 Localazy 连接并将其翻译成多语言,
  • 使用 GitHub Actions 自动化字符串上传和下载。

安装 Laravel 框架

有几种方法可以 安装 Laravel (选择适合您和您操作系统的方法)。 通常,你可能会使用 composer 去安装框架。但由于我使用的是 macOS 并且希望保持笔记本电脑的清洁,我选择通过 curl 安装 Laravel,它下载了一个容器化应用程序。

如果您在 Mac 电脑上开发并启动运行了 Docker Desktop ,这是一个巨大的优势 - 我们知道容器化应用的好处 (对所有感兴趣的人,我推荐阅读 Docker Deep Dive: Zero to Docker in a single book).

让我们安装应用程序。我输入了 laravel-i18n-gh-actions-example 作为我的应用程序名。

curl -s "https://laravel.build/laravel-i18n-gh-actions-example" | bash

通过 curl 安装 Laravel

该应用程序随附 Laravel Sail,由 Laravel 8 引入。它是一个命令行界面,用于与 Laravel 默认的 Docker 开发环境交互。 Sail 提供了一种无需 Docker 经验即可构建 Laravel 应用程序的方法。


运行 Laravel 应用程序

好了, 项目创建完成。 现在可以运行应用程序了。进入到应用程序目录并启动 Laravel Sail。

1cd laravel-i18n-gh-actions-example && ./vendor/bin/sail up

Laravel
运行 Laravel Sail

运行应用程序的这个过程。由于需要构建应用程序容器,第一次可能需要一段时间,所以请耐心等待。值得注意的是 - 如果你是 Docker 专家 - 关于 Sail 的一切都可以使用 Laravel 自带的 docker-compose.yml 文件定制。

启动应用程序的 Docker 容器后, 您可以在你的 web 浏览器中访问应用程序: http://localhost。您应该会看到与下面类似的屏幕。

Laravel 应用程序启动并运行


安装 Git - 我们想要实现什么?

在以下步骤中,我们将为稍后设置的工作流准备我们的 git 仓库。正如您所想象的,有几十种工作流适合不同类型的应用程序 - 这一切取决您的需求。

我想向您展示一个相对简单的示例,以便您能够理解 GitHub Actions。如果你不知道我想要实现什么,下面的步骤就没有多大意义。那它是什么?

想象一下这个工作流:

  • 我们有两个主要的分支, developmaster
  • 然后,对于我们处理的每个任务,我们创建一个新的分支 (根据您的任务标题 - 为我们的 foo 简单任务 命名它为 foo )。
  • foo 分支中,我们定义了新的 source keys 当我们处理任务时。
  • 当任务准备好,我们为 develop 创建一个拉取请求。
  • 此时,我们希望将 source keys 上传 & 同步 到 Localazy 进行翻译。
  • 同时,翻译器可以处理翻译。
  • 然后,当发布程序时,我们将创建一个从 developmaster 的拉取请求。
  • 现在,当我们接受 PR 并因此推送到 master 分支,我们希望下载翻译 (在本地化中的文件) 并将其推送到 master 分支, 并很可能运行其他任务 (如测试 app, 构建/发布 app, …) - 这取决于您的需要。
  • 然后,一切就绪。

创建 & 初始化 Git 仓库

现在我们需要设置 Git。跳转到你的 GitHub 并创建一个空仓库。在我们的 Laravel 项目中复制远程地址并初始化 git 。

git init

然后,粘贴复制的地址并添加到远程。

git remote add origin git@github.com:localazy/laravel-i18n-gh-actions-example.git

让我们将项目推向 master 分支。我使用的是 VSCode,我已经在我的用户界面中完成了它。

然后, 创建一个 develop 分支并切换到它。将分支发布到远程。

git switch -c develop

现在,创建一个 foo 分支并在那里切换。我们与 Laravel 相关的代码事情将在这里进行。我们马上就去。

git switch -c foo

准备 Blade 模板 & 源翻译文件

我们在 foo 分支,是时候为 localization 准备 Blade 模板。有两个主要的方法本地化 Laravel 应用程序。一个使用 PHP 文件,另一个使用 JSON 文件。您还可以将它们合并在一起,这也可能是你项目中的一个用例。

无论如何,在本例中,我们将使用 php 文件。翻译文件位于应用程序根目录的 lang 目录中。由于我们的源语言是英语,请在 en 目录中创建一个名为 welcome.php 的新文件。

return [
    'laravel'                => 'Laravel',
    'home'                   => 'Home',
    'log_in'                 => 'Log in',
    'register'               => 'Register',
    'documentation'          => 'Documentation',
    'documentation_text'     => 'Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end.',
    'laracasts'              => 'Laracasts',
    'laracasts_text'         => 'Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.',
    'laravel_news'           => 'Laravel News',
    'laravel_news_text'      => 'Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.',
    'vibrant_ecosystem'      => 'Vibrant Ecosystem',
    'vibrant_ecosystem_text' => 'Laravel\'s robust library of first-party tools and libraries, such as <a href="https://forge.laravel.com" class="underline">Forge</a>, <a href="https://vapor.laravel.com" class="underline">Vapor</a>, <a href="https://nova.laravel.com" class="underline">Nova</a>, and <a href="https://envoyer.io" class="underline">Envoyer</a> help you take your projects to the next level. Pair them with powerful open source libraries like <a href="https://learnku.com/docs/laravel/billing" class="underline">Cashier</a>, <a href="https://learnku.com/docs/laravel/dusk" class="underline">Dusk</a>, <a href="https://learnku.com/docs/laravel/broadcasting" class="underline">Echo</a>, <a href="https://learnku.com/docs/laravel/horizon" class="underline">Horizon</a>, <a href="https://learnku.com/docs/laravel/sanctum" class="underline">Sanctum</a>, <a href="https://learnku.com/docs/laravel/telescope" class="underline">Telescope</a>, and more.',
    'shop'                   => 'Shop',
    'sponsor'                => 'Sponsor',
    'laravel_version'        => 'Laravel v:version',
    'php_version'            => '(PHP v:version)',
];

lang/en/welcome.php

为了具体起见,我们可以忽略 json 翻译文件,所以在您的 lang 目录中创建一个 .gitignore 文件。

# 忽略 json 文件
*.json

lang/.gitignore

正如您所注意的, 这个 welcome.php 文件包含来welcome.blade.php 模板中的键控文本。现在,将模板中的字符串替换为刚刚定义的键。让我举几个例子:

  • <title>Laravel</title> -> <title>{{ __('welcome.laravel') }},
  • <div ...><a ...>Documentation</a></div> -> <div ...><a ...{{ __('welcome.documentation') }}</a></div>,
  • <div ...>Laravel's robust library of...</div> -> <div ...>{!! __('welcome.vibrant_ecosystem_text') !!}</div>,
  • <div ...>Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})</div> -> <div ...>{ __('welcome.laravel_version', ['version' => Illuminate\Foundation\Application::VERSION]) }} {{ __('welcome.php_version', ['version' => PHP_VERSION]) }}</div>.

前两个例子非常简单;这是显示翻译字符串的标准语法。

在第三个示例中,我们必须告诉 Blade 不要转义数据。不过,在回显未转义的内容时,您应该小心,因为您的应用程序可能会受到攻击。

第四个示例替换我们在源语言文件 (:version) welcome.php 使用的占位符。要替换 Blade 模板中的占位符,请将替换数组作为第二个参数传递给 __ 函数。

您可以找到更多示例,包括复数,创建语言切换器 (以及更详细的解释) 请参阅 如何使用 Localazy and Laravel 构建多语言 PHP 应用 Francisco Melo* 编写, 这是我撰写这篇文章的起点和灵感所在。*

只是为了测试一下,如果我们现在刷新页面 - 它应该和外部化之前完全一样。

连接 Laravel 应用程序到 Localazy 项目

跳转到 Localazy 注册 页面并创建一个免费账户或 登录 (如果您已经加入我们的社区)。然后,命名你的组织并创阿金一个新项目。

选择英语作为源语言。此外,您还可以启用 社区翻译 (ShareTM) 选项来获取一些由 Localazy 自动翻译的字符串。

在集成页面上,选择 Laravel integration。将这段代码复制到剪贴板。


Localazy.com - Laravel 集成页面

在你项目的根目录中,创建一个名为 localazy.json 的文件。此文件用作 Localazy CLI 的配置文件。上面的示例 (我们将根据需要修改) 是简单的配置形式之一。 这里有很多方法可以调整 localazy.json 文件根据您的需要,在我们的文档 中描述了所有的内容。

将代码粘贴到 localazy.json 中。这个文件应该被推送到 Git 仓库。 尽管如此,我们不应该把诸如 writeKeyreadKey 之类的 secrets 推给别人。那我们该怎么办? 在项目的根目录再创建一个名为 localazy.keys.json 的文件,然后将秘钥 剪切 & 粘贴 到其中。之后,将一个文件添加到 `

.gitignore, 也位于项目根目录中。

# 其他 .gitignore 内容...
# Localazy 秘钥
localazy.keys.json

.gitignore

更新 localazy.json 以适应我们的应用程序

接下来,我们必须调整 localazy.json 文件,以便一切正常工作。这是最终的外观:

{
    "upload": {
      "type": "php",
      "files": "lang/en/**.php"
    },
    "download": {
      "files": "lang/${lang}/${file}"
    }
}

localazy.json

让我解释一下:正如我已经提到的,我将 writeKeyreadKey 移动到一个单独的文件中,所以它不在这里了。名为 upload.files 的属性已被更改。该值表示我们希望从 lang/en 目录中上传所有 php 文件。文件用作源语言文件。详细解释请参见 Upload reference.

download.files 的部分也有类似的变化。此属性的值指示 CLI 下载 与上传文件同名的文件 (占位符 ${file})。此外,文件应该按语言 (占位符 ${lang}) 分组到文件夹中。详细描述的所有可能的选项可在 Download reference 中查找。

好吧,上传并推送我们的进度; 是时候进行下一步了。

可选: 本地测试上传

只是一个提醒 - 我们希望通过 GitHub Actions 作自动化我们的工作流。如果你不想再本地进行测试,请跳到下一节。但有时,开发人员希望在开发过程中测试翻译 (我还希望在进入 GitHub Actions 之前确保所有内容都设置正确)。 所以,如果你感兴趣,我会告诉你怎么做。

有很多方法 安装 Localazy CLI (取决于几个因素)。我想用 Docker image 为了测试它,但不幸的是,苹果的芯片还不支持,因此我使用了 installation via NPM.

Localazy 建议将包全局安装到系统中,尽管我是在项目文件夹中安装的。

npm install @localazy/cli

之后,要测试上传,请使用:

npx localazy upload -s

参数 -s 代表模拟。它实际上不会将字符串上传到 Localazy,但 CLI 肯定会告诉您是否出现了任何问题。一切都很好,一切都设置正确!我们可以继续 GitHub 的操作。

添加 secrets 到我们的仓库

确保 GitHub Actions 有效,我们需要在仓库中创建 secrets。为什么呢?稍后, 我们将使用 Localazy UploadLocalazy Download 操作,我们需要他们从某处读取 writeKeyreadKey (以便正常访问我们的 Localazy 项目)。由于我们不希望它们被推送到仓库中 (本文前面描述的原因),我们将它们添加为 secrets。

在 repo 中,导航到 Settings -> Secrets -> Actions。我将 secrets 分别命名为 LOCALAZY_READ_KEYLOCALAZY_WRITE_KEY。为其两个 readKey/writeKey 都赋值,我们的配置应该类似于这个。

laravel-i18n-gh-actions-example 仓库 secrets

使用 GitHub Actions 自动上传

在我们的 IDE 中,创建一个 .github/workflows/upload.yml 文件。 或者,您可以在仓库中完成所有操作,进入 Actions -> New workflow -> Setup a workflow yourself。命名它为 upload.yml,添加下面的工作流代码并推送它。

代码应该如下所示:

name: Localazy Upload
on:
  push:
    branches: [ develop ]
    paths: [ lang/en/**.php ]
  pull_request:
    branches: [ develop ]
    paths: [ lang/en/**.php ]
  workflow_dispatch:
jobs:
  localazy-upload:
    name: Upload source language strings to Localazy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: localazy/upload@v1
        with:
          read_key: ${{ secrets.LOCALAZY_READ_KEY }}
          write_key: ${{ secrets.LOCALAZY_WRITE_KEY }}

.github/workflows/upload.yml

让我们深入研究这个文件并解释它。只是提醒您,此操作一般的目的是将新的源语言字符串上传到 Localazy,pushpull_requestdevelop 分支。

事实:

  • 我们为操作分配了一个可读的名称 Localazy Upload
  • 当工作流运行时 控制上,
  • 我们希望触发 pushpull_requestdevelop 分支 (由 分支: [ develop ] 提供),
  • 同时,我们只希望在任何源文件发生更改时才触发工作流 (由 路径: [ lang/en/**.php ] 提供),
  • 我们还希望允许从操作选项卡手动运行工作流 (workflow_dispatch:),
  • 我们定义一个 job (工作流由一个或多个顺序或并行的 job 组成),
  • 这个 job 被称为 localazy-upload 并且它有可读名称 上传源语言字符串到 Localazy (然后显示在 GitHub Actions 工作流中),
  • 我们指定了 job 将在其上运行的运行器的类型为 ubuntu-latest,
  • job 包含两步 - 最新作业将作为作业的一部分执行,
  • 第一步 actions/checkout@v3$GITHUB_WORKSPACE 下检出您的仓库,这样您的 job 就可以访问它 (文档 这里)
  • 第二步 localazy/upload@v1 它从 localazy.json 中读取配置,并使用 read_keywrite_key 处理上传 with
  • read_keywrite_key 的值通过 secrets.LOCALAZY_READ_KEYsecrets.LOCALAZY_WRITE_KEY 变量分别读取。

让我们测试一下工作流。在我们的 foo 分支,提交并推送我们所做更改。跳转到 GitHub 并向 develop 发出拉取请求。

创建 develop <- foo 的拉取请求

一旦创建拉取请求,我们的工作流就会被触发。你可以通过 一些检查尚未完成来判断。此外,在 Localazy Upload 工作流旁边有一个橙色的圆圈,这意味着它正在运行。

通过运行工作流拉取请求

点击 Details,我们可以显示当前正在运行的工作流步骤的信息。

上传工作流结果

一切都处理正确!你可以点击每个步骤旁边的箭头查看其详细信息。例如, 如果我们点击 Run localazy/upload@v1 动作输出。

Localazy CLI, v1.6.0
Command-line tool for the Localazy platform.
Read more information at https://localazy.com/docs/cli
Parameters:
  - deprecate missing: no
  - import as new: false
  - force current: false
  - filter source: true
  - app version: 0
  - groups: (default only)
  - folder: .
Processing files...
lang/en/welcome.php
(file: welcome.php, lang: inherited, type: php)
lang/en/validation.php
(file: validation.php, lang: inherited, type: php)
lang/en/auth.php
(file: auth.php, lang: inherited, type: php)
lang/en/passwords.php
(file: passwords.php, lang: inherited, type: php)
lang/en/pagination.php
(file: pagination.php, lang: inherited, type: php)
Verifying...
Validating...
Uploading 3 kB...
Upload results: 126 added, 0 updated, 0 deprecated
Using 397 out of 45000 source keys
Your app on Localazy: https://localazy.com/p/laravel-i18n-gh-action-example
Done.

localazy/upload@v1 动作输出

太好了,让我们转到 Localazy 中的应用程序并检查 文件管理 部分。 正如我们所看到的,所有文件都可以在那里找到。

Localazy - 文件管理

在 Localazy 中翻译您的文本

现在,添加一些语言并翻译和批准一些短语。

Localazy 提供三种方法供您选择和组合来翻译您的项目:

  1. 💪🏻 自行翻译或邀请贡献者 - 您可以开始自行翻译 并使用我们内置的建议系统。 建议 来自最流行的 机器翻译 引擎和上述 ShareTM。 随着项目的发展,要获得更多帮助,您可以 邀请您已经认识的志愿者或翻译人员

  2. 🦾 通过机器翻译批量翻译所有内容 - 使用 Localazy Autopilot plan,您可以通过 在内容上运行机器翻译 立即翻译整个文件 这非常适合第一次迭代和本地化测试。

  3. 🚩 使用 持续本地化 服务 完全自动化翻译过程 - 一旦您的 Localazy 集成设置完成,您可以从我们经过审查的翻译人员那里订购翻译,并让专业人士自动翻译您的项目。 该服务是主动式的,因此您不必对翻译人员进行微观管理,并且您可以偶尔访问 Localazy 以检查进度。

为了我们的目的,我将 welcome.php 文件翻译成 捷克语德语,西班牙语。 你可以在下面的两个截图中看到这一切。

Localazy - 语言列表

Localazy - -语言短语列表

总而言之,从现在开始,在每个拉取请求或推送到 develop,所有新的或更新的源密钥都将上传到 Localazy 准备翻译。

现在,我们可以合并拉请求并关闭 foo 分支。然后在我们的 IDE 中, 切换回到 develop 分支并 pull 更新。

1git switch develop && git pull

使用 GitHub Actions 自动下载

类似于上传,我们需要创建另一个工作流。跳转到项目的 IDE 并在 .github/workflows 目录中创建一个 download.yml 文件。

name: Localazy Download
on:
  push:
    branches: [ master ]
  workflow_dispatch:
jobs:
  localazy-download:
    name: Download strings from Localazy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: localazy/download@v1
        with:
          read_key: ${{ secrets.LOCALAZY_READ_KEY }}
          write_key: ${{ secrets.LOCALAZY_WRITE_KEY }}
      - run: |
          ls lang/**/**.php
      - run: |
          git config --local user.email "david@localazy.com"
          git config --local user.name "david-vaclavek[bot]"
          git add lang
          git commit -m "Add locale files" -a
      - uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          branch: master

.github/workflows/download.yml

要将工作流程融入我们的血液中,让我们再次浏览文件:

  • 我们为该操作分配了一个易于阅读的名称 Localazy Download
  • on 控制工作流何时运行,
  • 我们想在 push` 上触发工作流到 `master` 分支(由branches: [master ]` 给出),
  • 我们希望允许从「操作」选项卡(workflow_dispatch:)手动运行工作流,
  • 我们定义了一个「任务」(工作流运行由一个或多个可以按顺序或并行运行的作业组成),
  • 此「作业」称为“localazy-download”,并具有人类可读的名称从 Localazy 下载字符串(然后显示在 GitHub Actions Workflow 中),
  • 我们指定作业将在其上运行的运行器类型是 ubuntu-latest,
  • job 包含五个步骤 - 将作为任务的一部分执行的一系列任务,
  • 第一步 actions/checkout@v3$GITHUB_WORKSPACE 下签出您的存储库,以便您的任务可以访问它(文档此处
  • 因为我们将推送到另一个存储库,所以我们需要使用它 with``fetch-depth: 0 来防止将引用推送到目标存储库时出错(更多信息可以在 GitHub Push 动作文档)中找到,
  • 第二步 localazy/download@v1localazy.json 读取 download 配置,并使用 read_keywrite_key 处理从Localazy with 下载,
  • read_keywrite_key 值分别从 secrets.LOCALAZY_READ_KEYsecrets.LOCALAZY_WRITE_KEY 变量中读取,
  • 第三步可以跳过,但我只是想向您显示已下载文件的列表(ls lang/**/.php 命令),
  • 第四步设置 git 配置 (user.email, user.name),
  • 它还将lang存储库中的所有(新)文件添加到暂存区(git add lang),
  • 然后它提交所有添加的文件,
  • 第五步使用名为 ad-m/github-push-action@master 的操作,我发现它正在浏览 GitHub Actions Marketplace 并记录在 此处,
  • 此操作使用 secrets.GITHUB_TOKEN 变量将先前提交的文件推送到 master 分支(有关更多信息 GITHUB_TOKEN secret).

一般来说, GITHUB_TOKEN secret 是处于安全考虑而存在的,它是在GitHub 运行的每个工作流开始时创建的。它可用于在工作流运行中进行身份验证。当 job 完成时,它将过期。

好的,现在是时候测试我们的工作流程了。首先,推送新建的文件 download.yml 至远程。让我们创建另一个拉取请求,这次是到 master。这一次,当我们创建拉取请求时,没有运行工作流 - 这正是我们想要的。

但是一旦我们合并拉取请求,我们的工作流就会被触发。当它结束时,我们可以仔细检查每一步的细节。例如,我们可以通过 localazy/download@v1 操作查看下载的文件。


下载工作流结果

当我们检查仓库时,我们可以看到 master 分支的本地化文件已更新,而 develop 分支没有这些文件。这正是我们在这个例子中想要做的。

lang 文件夹在主分支

有关 GitHub Actions 的大部分步骤来自 自动本地化:GitHub Actions ❤ Localazy 文章由 Václav Hodek 撰写- 感谢您的启发。

最后一步 - 请参阅我们翻译的应用程序

本文到此结束。但如果不向您展示结果,它是无法完成的。我们需要对 Laravel web routing 进行一些调整, 以便它将传递的语言考虑在内。通常,您会在一个单独的分支 (可能是 foo2?) 中工作,将其合并到 develop,测试,然后将其合并到 master 或 … 但出于我们的目的,让我们快速测试它。

让我们切换到您 IDE 的 master 分支,并 git pull 变更.. 跳转到 routes/web.php 文件。在此文件中,您可以为应用程序注册 Web 路由。更新代码:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/{locale?}', function ($locale = null) {
    if (isset($locale)) {
        app()->setLocale($locale);
    }

    return view('welcome');
});

routes/web.php

使用上面的代码,我们告诉应用程序如果在路径中有一个 locale 参数,请设置其语言环境。就是这样,它的其余部分是自动完成的。尝试其中一些 URL:

我们的应用程序使用英语,源英语

我们的应用程序使用西班牙语,由 Localazy 翻译

我们的应用程序使用德语,由 Localazy 翻译

我们的应用程序使用捷克语,由 Localazy 翻译

  • localhost/pl - oops,有一个后退到英语,它被设置为默认语言 (更多关于这个详见 这里)

在不访问 Localazy 的情况下查看是否缺少某些翻译,您可以使用 Laravel Translation Checker。这样,您可以轻松投入到您的 IDE 中并且专注构建您的 Laravel 项目。但我们希望你能不时地打声招呼,看看 Localazy 的新内容

源代码

此演示项目的源代码可在 GitHub 上获取。别忘了浏览 .github/workflows 文件内容!

获得 25% 折扣的 Localazy 计划

祝贺您成功!您一定很爱 Laravel!我们也是,所以我们想为任何阅读本文的人提供 25% 的折扣。

🏷️ 购买 Localazy 计划时使用折扣码 “laravelnews“ 并 享受 Localazy 计划 25% 折扣一年。 ⭐

本地化 Laravel 项目并获得奖励!

如果您正在寻找一种最终本地化您的 Laravel 项目的方法,并且受到本文的启发,我们很乐意听到您的故事并 在我们的博客上介绍您的产品。将这篇文章加入书签并 填写采访表 一旦你启动并运行 Localazy。

💰 赏金邀约: 如果您认为可以找到更好的方式将 Localazy 与 the Laravel 框架集成,并希望开发自己的集成、库或实用程序, 请告知我们!

结语

我们希望您喜欢这篇文章,它展示了Localazy 和 GitHub Actions 对 Laravel 本地化的强大作用。我们相信任何可以自动化的东西都应该自动化,本地化就是其中之一。

如果您对本教程或 Localazy 有任何疑问,请随时通过电子邮件联系我们 team@localazy.com

你也可以 加入 Localazy Discord 查看其他使用 Localazy 的开发人员在做什么,或者 接受我们对 GitHub 上 Localazy 社区的邀请 在那里,你可以为你的Laravel 项目找到更多社区来源的资产。期待在那里见到你!

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/localazy-github...

译文地址:https://learnku.com/laravel/t/67074

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!