현재 위치: > 최신 기사 목록> VSPRINTF를 사용하여 다국어 문자열 템플릿을 구현하십시오

VSPRINTF를 사용하여 다국어 문자열 템플릿을 구현하십시오

gitbox 2025-06-04

다국어 (i18n) 개발에서 프로그래머는 종종 사용자 이름, 시간, 수량 등과 같은 변수를 템플릿 문자열에 삽입해야합니다. 문자열 스 플라이 싱이 직접 사용되는 경우, 코드 가독성이 좋지 않을뿐만 아니라 유지 관리가 어렵습니다. PHP가 제공하는 vsprintf () 함수는이 문제를 해결하기위한 강력한 도구입니다. 형식 형식과 배열 매개 변수를 결합하여 유연하고 강력한 동적 교체 기능을 달성합니다. 특히 다국어 시나리오에 적합합니다.

1. vsprintf () 란 무엇입니까?

vsprintf () 는 php의 문자열 서식 함수입니다. 그것의 작동 원리는 sprintf () 와 유사하며, 차이는 매개 변수가 배열로 전달된다는 것입니다. 이를 통해 배열 (데이터베이스에서 얻은 다국어 변수)을 문자열 템플릿으로 쉽게 전달할 수 있습니다.

구문은 다음과 같습니다.

 string vsprintf(string $format, array $values)
  • $ 형식 : 자리 표시 자 형식이있는 문자열.

  • $ 값 : 배열의 각 값이 문자열의 자리 표시자를 차례로 교체하는 배열.

2. 다국어 템플릿에서 vsprintf ()의 적용

다국어 시스템의 예를 고려하십시오. 다음 정보를 표시해야합니다.

영어 : 안녕하세요, 존! 읽지 않은 5 개의 메시지가 있습니다.
중국어 : 안녕하세요, 존! 읽지 않은 5 개의 메시지가 있습니다.

변수 (사용자 이름 및 메시지 번호)를 유연하게 바꾸려면이 두 문장을 템플릿으로 사용하여 자리 표시 자 %s 로 표시 할 수 있습니다.

샘플 코드 :

 <?php

// 언어 파일 또는 데이터베이스에서로드 된 언어 템플릿을 가정합니다.
$translations = [
    'en' => 'Hello, %s! You have %d unread messages.',
    'zh' => '안녕하세요,%s!당신은 가지고 있습니다 %d 읽지 않은 메시지。'
];

// 사용자 정보
$user = 'John';
$messageCount = 5;

// 현재 언어
$lang = 'zh'; // 또는 'en'

// 사용 vsprintf 교체하십시오
$output = vsprintf($translations[$lang], [$user, $messageCount]);

echo $output;

?>

산출:

 안녕하세요,John!당신은 가지고 있습니다 5 읽지 않은 메시지。

보시다시피, 우리는 템플릿에 정의 된 두 자리 표시 자 %s (string) 및 %d (정수)를 vsprintf () 를 통해 각각 사용자 이름과 메시지 번호로 바꿉니다.

3. 위치 매개 변수의 형식을 지원합니다

보다 복잡한 언어 구조가 필요할 때 자리 표시 자 포지션이 변경 될 수 있습니다. 예를 들어:

 $translations = [
    'en' => 'User %1$s has %2$d items in cart.',
    'fr' => 'Il y a %2$d articles dans le panier de l’utilisateur %1$s.'
];

매개 변수 위치 ( %1 $ S , %2 $ D )를 지정하면 구문 순서가 다른 오류를 피할 수 있습니다.

예:

 <?php

$translations = [
    'en' => 'User %1$s has %2$d items in cart.',
    'fr' => 'Il y a %2$d articles dans le panier de l’utilisateur %1$s.'
];

$user = 'Alice';
$cartItems = 3;

$lang = 'fr';

echo vsprintf($translations[$lang], [$user, $cartItems]);

?>

산출:

 Il y a 3 articles dans le panier de l’utilisateur Alice.

4. URL 예제 결합

"개인 홈페이지를 방문하려면 여기를 클릭하십시오 : <a href = '%s'> link </a>"

실제로 사용하면 다음을 작성할 수 있습니다.

 <?php

$translations = [
    'zh' => "개인 홈페이지를 방문하려면 여기를 클릭하십시오:<a href='%s'>링크</a>"
];

$url = 'https://gitbox.net/user/profile';

echo vsprintf($translations['zh'], [$url]);

?>

산출:

 개인 홈페이지를 방문하려면 여기를 클릭하십시오:<a href='https://gitbox.net/user/profile'>링크</a>

5. 요약

다국어 문자열 템플릿의 동적 교체를 구현하기 위해 vsprintf ()를 사용하면 다음과 같은 장점이 있습니다.

  • 템플릿에는 명확한 구조와 강력한 유지 보수가 있습니다.

  • 매개 변수 위치 제어를 지원하고 다른 구문 구조 언어에 적응합니다.

  • 배열 데이터 및 언어 팩과 편리하게 통합;

  • HTML 및 URL을 출력 할 때 여전히 유연하고 효율적입니다.

Laravel, Symfony와 같은 프레임 워크를 사용하는 프로젝트의 경우 자체 캡슐화 된 번역 방법이 있지만 기본 구현은 여전히 ​​템플릿 자리 표시자를 대체하는 vsprintf ()를 사용할 수 있습니다.

요컨대, vsprintf () 마스터 링은 우아하고 다국어 친화적 인 PHP 코드를 작성하는 데 중요한 부분입니다.