Có ai biết thư viện Java sẽ cho phép tôi phân tích cú pháp các tệp .PO? Tôi chỉ muốn tạo Bản đồ các ID và Giá trị để tôi có thể tải chúng vào cơ sở dữ liệu.Có thư viện Java nào để phân tích cú pháp các tệp PO gettext không?
Trả lời
Theo Java gettext utilities Manual bạn có thể chuyển đổi tệp PO thành lớp ResourceBundle bằng cách sử dụng chương trình msgfmt --java2
và đọc nó bằng cách sử dụng java.util.ResourceBundle hoặc gnu.gettext.GettextResource - Tôi cho rằng đó là cách hiệu quả nhất. Gettext-commons thực hiện chính xác bao gồm cả cùng tạo quá trình trung gian để gọi msgfmt bởi vì nó được bố trí như sau:
gettext Commons là thư viện Java làm cho sử dụng của GNU tiện ích gettext.
Nếu bạn vẫn muốn chính xác thư viện Java thì cách duy nhất tôi thấy là viết thư viện của riêng bạn để phân tích định dạng này tức là viết lại mã nguồn msgfmt từ C sang ngôn ngữ Java. Nhưng tôi không chắc nó sẽ nhanh hơn quá trình tạo chương trình chạy + C.
Tôi cũng cố gắng như vậy, bạn có thể vui lòng cho biết chính xác tôi có thể sử dụng 'msgfmt' trong dự án java của tôi để chuyển đổi po hay không để ResourceBundle.It trông giống như lệnh. –
gettext-commons là trang duy nhất tôi tìm thấy khi thực hiện một số nghiên cứu một thời gian.
Tôi không thể tìm thấy mã trong dự án thực sự đọc tệp PO. Bạn đã? –
Gettext-commons gọi msgfmt là bước trung gian, vì vậy bạn không thể tránh tạo ra quá trình. Xem hình này http://xnap-commons.sourceforge.net/gettext-commons/gettext-structure.png – aponomarenko
Tôi đã tìm kiếm trên Internet và cũng không thể tìm thấy thư viện hiện có. Nếu bạn sử dụng Scala, thật dễ dàng để tự viết một trình phân tích cú pháp, nhờ tính năng kết hợp trình phân tích cú pháp của nó.
Gọi PoParser.parsePo("po file content")
. Kết quả là một danh sách của Translation
.
Tôi đã thực hiện mã này vào một thư viện (có thể được sử dụng bởi bất kỳ ngôn ngữ JVM, bao gồm Java, tất nhiên!): https://github.com/ngocdaothanh/scaposer
import scala.util.parsing.combinator.JavaTokenParsers
trait Translation
case class SingularTranslation(
msgctxto: Option[String],
msgid: String,
msgstr: String) extends Translation
case class PluralTranslation(
msgctxto: Option[String],
msgid: String,
msgidPlural: String,
msgstrNs: Map[Int, String]) extends Translation
// http://www.gnu.org/software/hello/manual/gettext/PO-Files.html
object PoParser extends JavaTokenParsers {
// Removes the first and last quote (") character of strings
// and concats them.
private def unquoted(quoteds: List[String]): String =
quoteds.foldLeft("") { (acc, quoted) =>
acc + quoted.substring(1, quoted.length - 1)
}
// Scala regex is single line by default
private def comment = rep(regex("^#.*".r))
private def msgctxt = "msgctxt" ~ rep(stringLiteral) ^^ {
case _ ~ quoteds => unquoted(quoteds)
}
private def msgid = "msgid" ~ rep(stringLiteral) ^^ {
case _ ~ quoteds => unquoted(quoteds)
}
private def msgidPlural = "msgid_plural" ~ rep(stringLiteral) ^^ {
case _ ~ quoteds => unquoted(quoteds)
}
private def msgstr = "msgstr" ~ rep(stringLiteral) ^^ {
case _ ~ quoteds => unquoted(quoteds)
}
private def msgstrN = "msgstr[" ~ wholeNumber ~ "]" ~ rep(stringLiteral) ^^ {
case _ ~ number ~ _ ~ quoteds => (number.toInt, unquoted(quoteds))
}
private def singular =
(opt(comment) ~ opt(msgctxt) ~
opt(comment) ~ msgid ~
opt(comment) ~ msgstr ~ opt(comment)) ^^ {
case _ ~ ctxto ~ _ ~ id ~ _ ~ s ~ _ =>
SingularTranslation(ctxto, id, s)
}
private def plural =
(opt(comment) ~ opt(msgctxt) ~
opt(comment) ~ msgid ~
opt(comment) ~ msgidPlural ~
opt(comment) ~ rep(msgstrN) ~ opt(comment)) ^^ {
case _ ~ ctxto ~ _ ~ id ~ _ ~ idp ~ _ ~ tuple2s ~ _ =>
PluralTranslation(ctxto, id, idp, tuple2s.toMap)
}
private def exp = rep(singular | plural)
def parsePo(po: String): List[Translation] = {
val parseRet = parseAll(exp, po)
if (parseRet.successful) parseRet.get else Nil
}
}
Tuyệt vời, +1 để sử dụng Scala –
Các tennera project on github chứa một phân tích cú pháp ANTLR-based cho GNU gettext PO /NỒI. Tôi nghĩ rằng nó được sử dụng bởi Redhat cho một phần mềm dịch thuật dựa trên web.
.MO phân tích cú pháp (không Java, nhưng Scala), phân tích vào bản đồ: http://scalamagic.blogspot.com/2013/03/simple-gettext-parser.html, nguồn: http://pastebin.com/csWx5Sbb
Chào mừng bạn đến với Stackoverflow! Nói chung, chúng tôi thích câu trả lời trên trang web để có thể tự đứng vững - Liên kết rất tuyệt, nhưng nếu liên kết đó phá vỡ câu trả lời thì phải có đủ thông tin để vẫn hữu ích. Vui lòng xem xét chỉnh sửa câu trả lời của bạn để bao gồm thêm chi tiết. Xem [FAQ] (http://www.stackoverflow.com/faq) để biết thêm thông tin. – slm
Tôi đã tìm thấy một số lớp học java để đọc và ghi các file po: https://launchpad.net/po-parser
- 1. phân tích cú pháp các tệp gettext .po với python
- 2. Thư viện phân tích cú pháp tên Java?
- 3. Đặc điểm tệp/thư viện phân tích cú pháp .blg
- 4. Có ai biết thư viện trong Java có thể phân tích cú pháp ESRI Shapefile không?
- 5. Phân tích cú pháp các tệp nhị phân MIPS: có thư viện Python để phân tích cú pháp dữ liệu nhị phân không?
- 6. Có thư viện ngữ pháp phân tích cú pháp (PEG) nào cho Javascript hoặc PHP không?
- 7. Có thư viện phân tích cú pháp PDF miễn phí nào hoạt động trong Android không?
- 8. Thư viện C để phân tích cú pháp Ngày giờ
- 9. có thư viện nào để phân tích cú pháp địa chỉ ở Hoa Kỳ không?
- 10. Phương tiện phân tích cú pháp Thư viện C++
- 11. Thư viện trình phân tích cú pháp toán học Javascript
- 12. Thư viện phân tích cú pháp SQL cho Python
- 13. Trình phân tích cú pháp email Java?
- 14. Trình phân tích cú pháp phân tích cú pháp của scala có phân tích cú pháp các tệp nhị phân không?
- 15. Thư viện Java để phân tích cú pháp tham số dòng lệnh?
- 16. làm cách nào để phân tích cú pháp tệp dtd
- 17. Có thư viện mã nguồn mở Java để phân tích các tệp Excel 2007 không?
- 18. Có một thư viện Python tốt có thể phân tích cú pháp C++ không?
- 19. Kết hợp phân tích cú pháp phân tích cú pháp, phân tích cú pháp và phân tích cú pháp rừng
- 20. gcc để phân tích cú pháp mã
- 21. Ai đó có thể phân tích cách hoạt động của tệp bản địa hóa (.mo, .po)?
- 22. Thư viện Haskell để phân tích cú pháp các tập lệnh Bash?
- 23. Thư viện DOM ưa thích để phân tích cú pháp các trang html với node.js?
- 24. Có trình phân tích cú pháp Java cho ngôn ngữ Java không?
- 25. Thư viện C để phân tích cú pháp các ngày gần đúng
- 26. Phân tích cú pháp RDF n-triple Java
- 27. Thư viện nào tốt nhất để phân tích cú pháp RSS/Atom trong Perl?
- 28. Có một trình phân tích cú pháp/cách nào có sẵn để phân tích cú pháp các tệp kết xuất Wikipedia bằng cách sử dụng Python không?
- 29. FileNotFoundException khi đọc tệp .xml để phân tích cú pháp
- 30. Đọc và phân tích cú pháp KML trong java
Chính xác những gì bạn cần làm? –
Tò mò, tệp PO là gì? – Nishant
tệp PO là tệp tài nguyên được tạo bởi GNU gettext –