Index: share/mk/doc.commands.mk =================================================================== --- share/mk/doc.commands.mk +++ share/mk/doc.commands.mk @@ -70,8 +70,13 @@ HTML2TXT?= ${PREFIX}/bin/links HTML2TXTOPTS?= -dump ${HTML2TXTFLAGS} +ITSTOOL?= ${PREFIX}/bin/itstool + JING?= ${PREFIX}/bin/jing +MSGFMT?= ${PREFIX}/bin/msgfmt +MSGMERGE?= ${PREFIX}/bin/msgmerge + XMLLINT?= ${PREFIX}/bin/xmllint XSLTPROC?= ${PREFIX}/bin/xsltproc Index: share/mk/doc.docbook.mk =================================================================== --- share/mk/doc.docbook.mk +++ share/mk/doc.docbook.mk @@ -270,6 +270,61 @@ ${SED} 's|@@URL_RELPREFIX@@|http://www.FreeBSD.org|g' < ${.TARGET} > ${DOC}.parsed.print.xml ${SED} -i '' -e 's|@@URL_RELPREFIX@@|../../../..|g' ${.TARGET} +# translation ------------------------------------------------------- + +# Master English document +MASTERDOC_EN?= ${MASTERDOC:S/${LANGCODE}/en_US.ISO8859-1/} +TRAN_DIR?= ${MASTERDOC:H} +EN_DIR?= ${TRAN_DIR:S/${LANGCODE}/en_US.ISO8859-1/} +# convert locale lang_REGION to ISO 639-1 two-char language code +# the first two chars of codes match ISO-639, except zh_TW +ISO_LANG?= ${LANGCODE:S/zh_TW/za_TW/C/_.*$//} +NORMALIZE_CMD= ${XMLLINT} --nonet --noent --valid --xinclude +# filter redundant namespace attributes +FILTER_CMD= ${XMLLINT} --nsclean +CLEANFILES+= ${DOC}.translate.xml ${ISO_LANG}.mo ${ISO_LANG}.mo + +# fix settings in PO file +POSET_CMD= ${SED} -i '' -e 's,^\"Language: \\n,\"Language: ${ISO_LANG}\\n,' \ + -e 's,^\"Content-Type: text/plain; charset=CHARSET\\n,\"Content-Type: text/plain; charset=UTF-8\\n,' + +.if ${.TARGETS:Mpo} || ${.TARGETS:Mtran} +${DOC}.translate.xml: + @if [ "${TRAN_DIR}" == "${EN_DIR}" ]; then \ + ${ECHO} "build PO file in a non-English dir" ; \ + exit 1 ; \ + fi + @${NORMALIZE_CMD} ${MASTERDOC_EN} > ${.TARGET}.tmp + @${FILTER_CMD} ${.TARGET}.tmp > ${.TARGET} + @${RM} ${.TARGET}.tmp + +po: ${ISO_LANG}.po +.PHONY: po +${ISO_LANG}.po: ${DOC}.translate.xml + @${ITSTOOL} -k -o ${ISO_LANG}.po.tmp ${DOC}.translate.xml + @( if [ -f "${ISO_LANG}.po" ]; then \ + echo "${ISO_LANG}.po exists, merging" ; \ + ${MSGMERGE} -o ${ISO_LANG}.po.new ${ISO_LANG}.po ${ISO_LANG}.po.tmp ;\ + ${MV} ${ISO_LANG}.po.new ${ISO_LANG}.po ; \ + ${RM} ${ISO_LANG}.po.tmp ; \ + else \ + ${ECHO} "New PO file created." ; \ + ${ECHO} "Please check and correct the settings in the header of ${ISO_LANG}.po." ; \ + ${MV} ${ISO_LANG}.po.tmp ${ISO_LANG}.po ; \ + ${POSET_CMD} ${.TARGET} ; \ + fi ) + +${ISO_LANG}.mo: ${ISO_LANG}.po + @${MSGFMT} -o ${.TARGET} ${.ALLSRC} + +tran ${DOC}.xml: ${DOC}.translate.xml ${ISO_LANG}.mo + @if [ "${TRAN_DIR}" = "${EN_DIR}" ]; then \ + ${ECHO} "build translation in a non-English dir" ; \ + exit 1 ; \ + fi + ${ITSTOOL} -l ${ISO_LANG} -m ${ISO_LANG}.mo -o ${DOC}.xml ${DOC}.translate.xml +.endif + # XHTML ------------------------------------------------------------- index.html: ${DOC}.parsed.xml ${LOCAL_IMAGES_LIB} ${LOCAL_IMAGES_PNG} \