2012-05-26 26 views
9

Có thể sử dụng một cái gì đó như gettext để dịch một tập lệnh R hay không. Nếu vậy, làm thế nào? Nếu không, tôi có những lựa chọn nào khác?Bản dịch của tập lệnh R sử dụng gettext

+0

Bạn có ý nghĩa gì khi "dịch"? – Subs

+0

Tôi có nghĩa là tôi có dây trong đó, viết bằng tiếng Anh. Tôi cần phải đánh dấu chúng bằng cách nào đó, trích xuất để tách tập tin, dịch chúng sang tiếng Nga. Và bằng cách chạy tập lệnh với một tham số - nó sẽ hiển thị các thông điệp bằng tiếng Anh và với các thông điệp khác của Nga. Giống như gettext hoạt động :) – Shark

+1

Hãy xem '? Gettext' – Andrie

Trả lời

10

Bạn có thể sử dụng các công cụ cơ bản :: gettext/ngettext, base :: bindtextdomain và tools :: xgettext2pot.
Ví dụ:

myFunction <- function() 
{ 
    bindtextdomain("R-myProgram","/my/translation/dir") 
    gettext("Hello",domain="R-myProgram") 
} 

Sau đó, giả như chức năng này là bên trong một file có đường dẫn là "/my/dir/R/myfile.R" sử dụng: tools::xgettext2pot("/my/dir", "/my/translation/dir/pot/R-myProgram.pot") sau đó sử dụng msginit, msgfmt, vv để tạo ra một .mo tập tin /my/translation/dir/fr/LC_MESSAGES/R-myProgram.mo. myFunction() bây giờ sẽ in "Bonjour" thay vì "Hello" nếu ngôn ngữ của bạn là tiếng Pháp.

Một vài điểm khác:

  • Nó có vẻ như xgettext2pot giả định dự án của bạn là một gói R tiêu chuẩn và trông chỉ cho * .R file bên trong R/thư mục con.
  • Các domain lập luận có vẻ là theo mặc định không gian tên của hàm gọi gettext()
  • stop(), tin nhắn(), cảnh báo() và packupStartupMessage() cũng được phát hiện bởi xgettext2pot. Ngoài ra còn có một hàm gettextf() có sẵn như là một biến thể giống như sprintf của gettext().
  • Vì tiện ích xgettext chuẩn dường như không hỗ trợ cú pháp R, và vì công cụ này phải sử dụng các công cụ :: xgettext2pot, một vài điều sẽ bỏ lỡ từ cách tiếp cận chuẩn, chẳng hạn như ngữ cảnh tin nhắn (pgettext()), cờ chỉ ra các chuỗi giống như printf và khả năng viết các chú thích trong mã cho các dịch giả (được trích bởi xgettext -c) mà không cần sửa đổi tệp .pot bằng tay.
+0

Nếu tôi đặt ngôn ngữ của mình bằng 'sys.getlocale (" LC_All "," fr ")' sang tiếng Pháp I chỉ cần không nhận được dịch 'msstr' trở lại. vẫn còn xin chào. Tại sao vậy? –

Các vấn đề liên quan