WordPress에서 하이퍼 링크로 번역 가능한 텍스트를 만드는 방법은 무엇입니까?


15

하이퍼 링크로 번역 할 수있는 텍스트를 만드는 다른 방법을 보았습니다. 그러나 모범 사례를 찾지 못했습니다.

그래서, 내가 찾은 해결책 중 일부는 다음과 같습니다.

// METHOD 1
sprintf( __( 'Please read %1$sthis%2$s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );

// METHOD 2
echo '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">';
_e( 'Please read this.', 'tacoverdo-example-domain' );
echo '</a>';

// METHOD 3
sprintf( __( 'Please read <a href="%s">this</a>.', 'tacoverdo-example-domain' ), esc_url( 'https://goo.gl' ) );

// METHOD 4
sprintf( __( 'Please read %sthis%s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );

// METHOD 5
_e( 'Please read <a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">this</a>', 'tacoverdo-example-domain' );

내 첫 번째 생각은 방법 1이 가장 좋을 것입니다. 번역가가 HTML을 알 필요는 없습니다. 그러나 그것은 또한 그것을 망치는 사람들을 허용하지 않습니다. 또한 HTML 부분 전체를 반복해서 번역 할 필요가 없기 때문에 매우 건조합니다 (반복하지 마십시오).

그러나 트위터 에이 질문을 게시 할 때 사람들은 여기에서 볼 수있는 것처럼 방법 3이 가장 좋을 것이라고 대답했습니다 .

그렇다면 WordPress에서 하이퍼 링크로 번역 가능한 텍스트를 어떻게 만들어야합니까?

답변:


17

이것은 매우 심각한 문제입니다. 고유 한 HTML 컨텐츠 문제와 문자열 스캔, 번역 프로세스 자체 및 검증과 같은 완전히 새로운로드 문제를 결합합니다.

따라서 다음을 결합해야합니다.

  1. 텍스트 (번역 가능 양식)
  2. HTML 마크 업 (깨지기 어렵지만 유연한 형태)
  3. URL 도착지 (안전하고 번역 가능한 형식으로 언어에 따라 다를 수 있음)

우리는 또한 친숙 함과 선행 기술, 즉 핵심이 무엇을해야 하는지를 고려해야합니다. 좋아, 빠른 검사에서 코어가 대부분의 경우 이러한 방식 으로이 작업을 수행하는 데 도움이되지 않습니다.

이러한 요소들과 주변 토론에서 나는 필요와 우선 순위에 따라 3 가지 접근 방법이 있다고 말할 것이다.

단순함-모든 것을 갖춘 하나의 문자열

__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
  • 코드에서 쉽게 따라하기
  • 모든 부분 (텍스트, 마크 업, URL)을 전체적으로 번역 할 수 있습니다
  • 하드 코드 된 URL
  • HTML 나누기 쉬운
  • 핵심에서 인기있는

균형 조정 — URL이 나옴

sprintf( 
    __( 'Please read <a href="%s">this</a>', 'example-domain' ), 
    esc_url( 'https://goo.gl' ) 
);
  • 따라 가기 쉽다
  • 모든 부분을 번역 할 수 있지만 URL은 별도의 번역 호출이 필요합니다
  • URL은 동적이고 이스케이프 될 수 있습니다
  • HTML 나누기 쉬운
  • 핵심에서 인기있는
  • 일화 적으로 개발자 / 번역가에게 인기

Piecemeal — 마크 업이 나옴

sprintf( 
    __( 'Please read %1$sthis%2$s.', 'example-domain' ), 
    '<a href="' . esc_url( 'https://goo.gl' ) . '">',
    '</a>' 
);

또는 연결을 통해

'<a href="' . esc_url( 'https://goo.gl' ) . '">' 
. __( 'Please read this.', 'example-domain' );
. '</a>';
  • 읽기 어려운
  • HTML 나누기에 더 탄력적
  • 핵심에서 덜 인기
  • 번역을 위해 더 많은 컨텍스트가 필요합니다

엄지 손가락의 법칙 (내가 아는 한)

  1. 최대한 간단 하게 유지
  2. HTML 중단을 방지하기위한 단편
  3. 다른 모든 경우에 대해 균형 조정 (가장 일반적 일 수 있음)

+1. 은 "균형"옵션처럼 나는, 어쩌면 사용하여 상황에 맞는 추가 개선 될 수있다 _x대신__
gmazzap

나는 스 니펫을 포괄적 인 예제가 아닌 기본 예제로 의도했습니다. 많은 시나리오와 번역 기능으로 인해 각각에 차이가있을 수 있습니다.
Rarst

균형 잡힌 옵션에는 번역가가 잘못된 마크 업을 만들 수 있다는 문제도 있습니다. 확실하고 안전한 번역을 위해서는 html을 제외하는 것이 좋습니다. 또한 나는 문맥으로 번역 기능에 투표합니다. 이를 통해 번역가는 위치, 플러그인 컨텍스트, 테마에 대한 지식이없는 방법을 이해할 수 있습니다.
bueltge

나는 '번역가들이 문맥을 필요로한다'라는 주장을 들었다. 이 예제에서 필요한 것은 무엇입니까 ? 필요할 때 컨텍스트를 제공하는 것이 좋지만이 경우에는 번역가가 실제로 필요합니까? 그들은 또는 %s의미 를 알고 있어야 합니까? 번역에 영향을 줍니까? <strong><a href target="#">
Taco Verdo

@TacoVerdo 링크가 끊어지면 텍스트가 없으면 대상이 무엇인지 알려 주어야 합니다. 컨텍스트는 정보가 완전하고 모호하지 않을 때까지 정보를 채우는 역할을합니다. 텍스트를 더 작은 독립 실행 형 조각으로 나누면 각 텍스트가 전체에 맞는 위치에 더 많은 컨텍스트가 필요합니다.
Rarst

8

요즘 나는 많은 다국어 웹 사이트를 사용하고 있습니다.

  1. 링크의 URL은 종종 번역 가능해야합니다.
  2. 트러스트 번역 기능 출력이 잘못되었습니다. 나는 거의 사용하지 __()않지만 항상 esc_html__()/ esc_attr__(). 이는 번역 할 문자열에 HTML을 포함 할 수 없음을 의미합니다.
  3. 영어로 글을 쓰면 우리는 종종 다른 언어에서 단어가 콘 텍스에 따라 다른 방식으로 쓰여질 수 있다는 것을 인식하지 못합니다. 따라서 텍스트에 1 개 또는 몇 개의 단어가 포함 된 경우 항상 *_x()번역 기능 의 변형 을 사용하는 것이 좋습니다 .
  4. 번역 가능한 각 문자열에 대해 둘 이상의 자리 표시자를 포함하는 것은 "위험"할 수 있습니다. 번역사가 개발자가 아닌 경우 페이지 렌더링이 쉽게 중단됩니다. 이 예 %1$sthis%2$s에서 비 기술적 인 번역가는 올바른 렌더링에 s바로 전이 this필요 하다는 것을 이해하지 못하며 개발자가 입력하고 this싶지만 오타가 있다고 생각할 수 있습니다 sthis.

이 모든 이유로 인해 링크가 포함 된 텍스트를 "적절하게"번역하는 것은 어렵습니다. 위에서 언급 한 모든 사항을 고려할 수있는 유일한 해결책은 다음과 같습니다.

$anchor = esc_html_x( 'Google', 'link text for google.com', 'txt-domain' );
$domain = esc_url( __( 'google.com', 'txt-domain' ) );  
$link   = sprintf( '<a href="https://%s">%s</a>', $domain, $anchor );

 /* translators: 1 is a link with text "Google" and URL google.com */
echo sprintf( esc_html__( 'Use %1$s to search.', 'example-domain' ), $link );

기술이 아닌 사람들이 안전하고 쉽게 번역 할 수 있지만 특히 여러 링크에 대해 수행 해야하는 경우 장황하고 PITA를 구현해야합니다 ...

그러나 많은 언어를 사용하는 수천 명의 (실제 또는 잠재적 인) 사용자가 실제로 공개 한 코드의 경우 이것이 내가 취하는 방법입니다.

이것은 실제로 내부 전용 코드조차도 사용하는 방식이지만 그게 나입니다.


참고 :

"Google"이라는 단어를 개별적으로 번역하기에는 너무 많은 것처럼 보일 수 있으며,이 경우에는 해당 될 수 있습니다. 그러나 때로는 브랜드 이름이 잘못되었다고 가정하기도합니다. 예를 들어, 이탈리아 에는 전 세계적 으로 ~ 30 개의 다른 이름으로 알려진 "Algida" 라는 브랜드 가 있습니다 .

이 경우 URL 및 / 또는 브랜드 이름을 하드 코딩하면 문제가 발생합니다.

번역 컨텍스트를 제공하면 번역가가 브랜드 이름을 번역해야하는지 여부를 결정하는 데 도움이됩니다.


2

번역자는 링크가 있음을 알아야 하므로 번역 가능한 문자열에 마크 업을 유지해야합니다 . 일부 언어에서는 결과 링크 텍스트가 여러 단어에 걸쳐있을 수 있으며, 올바르게 중첩되어야하는 쉼표 (또는 이에 상응하는)가 있거나 다른 마크 업이있을 수도 있습니다.

this 또는 here 아닌 말하기 링크 텍스트를 작성하는 것도 중요합니다 .

번역 할 수있는 옵션은 2 또는 3 뿐이지 만 URL도 번역 할 수 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.