Làm cách nào để tạo một văn bản với siêu liên kết có thể dịch trong WordPress?


15

Tôi đã thấy những cách khác nhau để tạo một văn bản với một siêu liên kết có thể dịch được. Tuy nhiên, tôi đã không thể tìm thấy một thực hành tốt nhất.

Vì vậy, đây là một số giải pháp tôi tìm thấy:

// 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' );

Suy nghĩ đầu tiên của tôi sẽ là phương pháp 1 sẽ là tốt nhất. Nó không yêu cầu người dịch của bạn biết HTML. Nhưng nó cũng không cho phép những người làm điều đó với nó. Nó cũng khá KHÔ (Đừng lặp lại chính mình) vì bạn không phải dịch lại toàn bộ phần HTML nhiều lần.

Tuy nhiên, khi đăng câu hỏi này lên twitter, mọi người đã trả lời rằng phương pháp 3 sẽ tốt nhất như bạn có thể thấy ở đây .

Vì vậy, làm thế nào tôi nên tạo một văn bản với siêu liên kết có thể dịch trong WordPress?

Câu trả lời:


17

Đây là một vấn đề rất nhiều mặt. Nó kết hợp các vấn đề nội dung HTML vốn có với toàn bộ các thách thức dịch thuật mới, chẳng hạn như quét các chuỗi, bản thân quá trình dịch thuật và xác minh.

Vì vậy, chúng ta phải kết hợp:

  1. Văn bản (ở dạng có thể dịch)
  2. Đánh dấu HTML (khó phá vỡ, nhưng tốt nhất là ở dạng linh hoạt)
  3. URL đích (ở dạng an toàn và tốt nhất có thể dịch, có thể cụ thể theo ngôn ngữ!)

Chúng ta cũng cần xem xét sự quen thuộc và nghệ thuật trước đây, nói cách khác - những gì cốt lõi sẽ làm. Ok, không có ích gì khi kiểm tra nhanh lõi làm điều này trong hầu hết (nếu không phải tất cả) các cách này.

Từ những yếu tố này và thảo luận xung quanh tôi sẽ nói có ba nhóm cách tiếp cận, tùy thuộc vào nhu cầu và ưu tiên.

Đơn giản - một chuỗi với tất cả mọi thứ

__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
  • dễ theo dõi trong mã
  • cho phép dịch toàn bộ các phần (văn bản, đánh dấu, URL)
  • URL được mã hóa cứng
  • dễ bị vỡ HTML
  • phổ biến trong cốt lõi

Cân bằng - URL bị hỏng

sprintf( 
    __( 'Please read <a href="%s">this</a>', 'example-domain' ), 
    esc_url( 'https://goo.gl' ) 
);
  • dễ dàng để làm theo
  • có thể dịch tất cả các phần, nhưng URL cần có cuộc gọi dịch riêng
  • URL có thể động và thoát
  • dễ bị vỡ HTML
  • phổ biến trong cốt lõi
  • giai thoại phổ biến với các nhà phát triển / dịch giả

Piecemeal - đánh dấu vỡ ra

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

hoặc thông qua ghép

'<a href="' . esc_url( 'https://goo.gl' ) . '">' 
. __( 'Please read this.', 'example-domain' );
. '</a>';
  • ít đọc
  • kiên cường hơn với các ngắt HTML
  • ít phổ biến trong cốt lõi
  • cần thêm ngữ cảnh cung cấp cho bản dịch

Quy tắc của một ngón tay cái (theo như tôi thấy)

  1. đơn giản để giữ cho nó đơn giản nhất có thể
  2. từng phần để ngăn chặn sự phá vỡ HTML
  3. cân bằng cho tất cả các trường hợp khác (có thể phổ biến nhất)

+1. Tôi thích tùy chọn "Cân bằng", có thể được cải thiện bằng cách thêm bối cảnh bằng cách sử dụng _xthay vì__
gmazzap

Tôi dự định đoạn trích là ví dụ cơ bản chứ không phải là toàn diện. Có thể sẽ có các biến thể trong mỗi do số lượng kịch bản và chức năng dịch tuyệt đối.
Hết

Tùy chọn cân bằng cũng có vấn đề, đó là người dịch có thể tạo đánh dấu sai. Đối với một bản dịch chắc chắn và an toàn thì tốt hơn là bạn loại trừ html. Ngoài ra tôi bỏ phiếu cho các chức năng dịch với bối cảnh. Điều đó mang đến cho người dịch cơ hội hiểu được cách thức mà không có kiến ​​thức về vị trí, bối cảnh trong plugin, chủ đề.
bueltge

Tôi đã từng nghe 'người dịch cần lập luận theo ngữ cảnh trước đây, nhưng điều đó khiến tôi băn khoăn. Họ cần bối cảnh cho ví dụ này là gì? Tôi nghĩ rằng đó là cách thực hành tốt để cung cấp ngữ cảnh khi cần, nhưng các dịch giả có thực sự cần nó trong trường hợp này không? Họ có cần biết liệu %slà viết tắt của <strong>hay <a href target="#">không? Liệu nó có ảnh hưởng đến bản dịch của họ?
Taco Verdo

@TacoVerdo nếu liên kết được chia ra tôi sẽ giả định văn bản mà không có nó rất tốt có thể là mơ hồ, trong trường hợp đó bối cảnh nên nói đến văn bản là cho. Bối cảnh phục vụ để đệm thông tin cho đến khi nó hoàn chỉnh và rõ ràng. Khi bạn chia văn bản thành các phần độc lập nhỏ hơn, mỗi phần trong số chúng cần nhiều ngữ cảnh hơn cho vị trí phù hợp với tổng thể.
Hết

7

Ngày nay tôi làm việc với nhiều trang web đa ngôn ngữ và tôi phải nói:

  1. URL của các liên kết thường cần phải được dịch.
  2. Tin tưởng chức năng dịch đầu ra là xấu. Tôi khá nhiều không bao giờ sử dụng __()nhưng luôn luôn esc_html__()/ esc_attr__(). Điều đó có nghĩa là chuỗi được dịch không thể chứa HTML.
  3. Viết bằng tiếng Anh chúng ta thường không nhận ra rằng trong các ngôn ngữ khác, một từ có thể được viết theo nhiều cách khác nhau tùy thuộc vào ngữ cảnh. Vì vậy, khi văn bản chứa 1 hoặc một vài từ, luôn luôn tốt hơn để sử dụng *_x()biến thể của các chức năng dịch.
  4. để bao gồm nhiều hơn một trình giữ chỗ cho mỗi chuỗi có thể dịch có thể là "nguy hiểm". Nếu người dịch không phải là nhà phát triển, họ sẽ dễ dàng phá vỡ kết xuất trang. Trong ví dụ, %1$sthis%2$smột dịch giả không có kỹ thuật không hiểu rằng strước đây thislà cần thiết để hiển thị đúng, và cũng có thể nghĩ rằng nhà phát triển muốn gõ thisnhưng đã đánh máy và viết sthis.

Vì tất cả những lý do này, việc dịch văn bản "đúng" có chứa các liên kết là khó khăn. Giải pháp khả thi duy nhất có tính đến tất cả những gì đã nói ở trên là:

$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 );

Điều này an toàn và dễ dàng được dịch bởi những người không có kỹ thuật, nhưng cũng dài dòng và Pita để thực hiện, đặc biệt là nếu điều này phải được thực hiện cho một số liên kết ...

Tuy nhiên, đối với một mã được phát hành ngoài tự nhiên với hàng ngàn người dùng (thực tế hoặc tiềm năng) nói nhiều ngôn ngữ, đây là cách tôi sẽ thực hiện.

Đây thực sự là cách tôi sử dụng ngay cả đối với mã chỉ sử dụng nội bộ, nhưng đó là tôi.


Lưu ý :

Nó có thể xuất hiện quá nhiều để làm cho từ "Google" có thể dịch riêng và điều đó có thể đúng với trường hợp cụ thể này. Nhưng đôi khi thậm chí cho rằng tên thương hiệu là sai. Chỉ cần nêu một ví dụ, ở Ý, chúng tôi có thương hiệu "Algida" được biết đến với ~ 30 tên khác nhau trên khắp thế giới .

Trong trường hợp đó, mã hóa URL và / hoặc tên thương hiệu sẽ gây ra sự cố.

Cung cấp ngữ cảnh cho bản dịch sẽ giúp người dịch quyết định xem họ có cần dịch tên thương hiệu hay không.


2

Bạn phải giữ đánh dấu trong chuỗi có thể dịch, bởi vì người dịch phải biết có một liên kết. Trong một số ngôn ngữ, văn bản liên kết kết quả có thể kéo dài nhiều từ, thậm chí có thể có dấu phẩy (hoặc tương đương) bên trong hoặc đánh dấu khác cần được lồng chính xác.

Nó cũng quan trọng để xây dựng một văn bản liên kết nói, không phải điều này hoặc ở đây .

2 hoặc 3 là các tùy chọn có thể dịch duy nhất, nhưng bạn cũng nên làm cho URL có thể dịch được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.