next-safe-action 与国际化集成:构建多语言应用的完整解决方案

【免费下载链接】next-safe-action Type safe and validated Server Actions in your Next.js project. 【免费下载链接】next-safe-action 项目地址: https://gitcode.com/gh_mirrors/ne/next-safe-action

next-safe-action 是一个为 Next.js 项目提供类型安全和验证的 Server Actions 工具。本文将详细介绍如何将 next-safe-action 与国际化(i18n)集成,为您的多语言应用提供完整解决方案,让验证错误信息能够根据用户语言动态显示。

next-safe-action 国际化集成

为什么需要国际化集成?

在全球化应用中,用户来自不同地区,使用不同语言。将 next-safe-action 与国际化集成,能够让验证错误信息以用户熟悉的语言显示,提升用户体验和交互友好性。next-safe-action 支持异步模式定义,这为加载翻译文件并动态生成多语言验证消息提供了可能。

异步模式:国际化集成的核心

next-safe-action 的关键特性之一是支持异步 schema 函数。通过传递返回 schema 的异步函数,而非直接传递 schema,您可以在验证前加载翻译文件,实现多语言错误消息。

基本实现步骤

  1. 设置异步 schema
// src/app/actions.ts
"use server";

import { z } from "zod";
import { actionClient } from "@/lib/safe-action";
import { getTranslations } from "@/lib/i18n";

export const createUser = actionClient
  .inputSchema(async () => {
    // 加载当前语言环境的翻译
    const t = await getTranslations("validation");

    return z.object({
      name: z.string().min(2, t("name.tooShort")),
      email: z.string().email(t("email.invalid")),
      age: z.number().min(18, t("age.tooYoung")),
    });
  })
  .action(async ({ parsedInput }) => {
    // 处理用户创建逻辑
    await db.user.create({ data: parsedInput });
  });
  1. 与 i18n 库集成

next-safe-action 可与任何 i18n 解决方案配合使用,包括 next-intli18nextreact-i18next 或自定义解决方案,只需确保翻译函数可在服务器端使用:

// next-intl 示例
import { getTranslations } from "next-intl/server";

.inputSchema(async () => {
  const t = await getTranslations("validation");
  return z.object({
    name: z.string().min(2, t("name.min")),
  });
})

注意:异步函数在每次 action 调用时都会执行,确保始终使用当前语言环境,这对于语言环境可能在调用之间变化的场景非常重要。

结合 schema 扩展实现复杂场景

您可以将国际化与 schema 扩展结合,基于基础 schema 构建多语言验证规则:

const baseClient = actionClient
  .inputSchema(z.object({ orgId: z.string() }));

export const createTeam = baseClient
  .inputSchema(async (prevSchema) => {
    const t = await getTranslations("validation");
    return prevSchema.extend({
      teamName: z.string().min(3, t("teamName.tooShort")),
    });
  })
  .action(async ({ parsedInput }) => {
    // parsedInput: { orgId: string, teamName: string }
  });

相关资源

通过以上方法,您可以轻松实现 next-safe-action 与国际化的集成,为全球用户提供流畅的多语言体验。无论是简单的表单验证还是复杂的业务逻辑,next-safe-action 都能确保您的应用在类型安全的同时,具备出色的国际化支持。

【免费下载链接】next-safe-action Type safe and validated Server Actions in your Next.js project. 【免费下载链接】next-safe-action 项目地址: https://gitcode.com/gh_mirrors/ne/next-safe-action

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐