Question

Quelqu'un sait-il d'une bibliothèque Java qui me permettra analyser des fichiers .po? Je veux simplement créer une carte d'ID et les valeurs que je puisse les charger dans une base de données.

Était-ce utile?

La solution

Selon utilitaires Java gettext Manuel vous pouvez convertir PO fichier à une classe ResourceBundle en utilisant le programme msgfmt --java2 et le lire à l'aide java.util.ResourceBundle ou gnu.gettext.GettextResource - Je suppose que ce soit une façon plus efficace. Gettext-commons faire exactement la même chose, y compris la création de processus intermédiaire à l'appel msgfmt car il est placé comme suit:

  

Gettext Commons est une bibliothèque Java fait usage de GNU gettext .

Si vous voulez toujours exactement une bibliothèque Java alors la seule façon dont je vois est d'écrire votre propre bibliothèque pour analyser ce format à savoir le code source rewrite msgfmt de C à langage Java. Mais je ne suis pas sûr que ce sera plus rapide que processus de création + programme d'exécution C.

Autres conseils

Je recherche Internet et n'a pas pu trouver une bibliothèque existante, que ce soit. Si vous utilisez Scala, il est assez facile d'écrire vous-même analyseur, grâce à sa fonction analyseur Combinator.

Appel PoParser.parsePo("po file content"). Le résultat est une liste de Translation.

J'ai fait ce code dans une bibliothèque (peut être utilisé par toutes les langues JVM, y compris Java, bien sûr!): 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
  }
}

gettext-communes est le seul que j'ai trouvé tout en faisant quelques recherches un peu en arrière dans le temps.

Le tennera sur github contient un analyseur à base ANTLR pour GNU-Gettext PO / POT. Je pense qu'il est utilisé par Redhat pour un logiciel de traduction en ligne.

analyseur .MO (pas Java, mais Scala), dans Parsis Carte: http://scalamagic.blogspot.com/2013/03/simple-gettext-parser.html , source: http://pastebin.com/csWx5Sbb

Je l'ai trouvé quelques classes Java pour lire et fichiers po d'écriture: https://launchpad.net/po-parser

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top