[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mplayer-dev-eng
Subject:    [MPlayer-dev-eng] [PATCH] Localized messages and locale in GUI
From:       Ingo Brückl <ib () wupperonline ! de>
Date:       2021-02-24 13:22:33
Message-ID: 6036548a.464a7c22.bm000 () wupperonline ! de
[Download RAW message or body]

This is how I see the configuration and installation of localized messages
for the GUI. Without enable-nls there is no change. (There isn't even a
change with a single user-defined message language.)

About configure (and enable-nls):

* if language_msg=all then en is the main language
* without enable-gui there is no nls
* with nls and a missing msgfmt there is a configure error
* language_msg can be multiple languages
* if language_msg is user-defined the first language is the main one
* the help file is the main language one
* the message language (MSG_LANGS) are passed to the Makefile

About Makefile:

* help_create_po.sh (yet to write) creates a po file in help/po from the
  respective help file if either the respective help file has changed or
  the main one (en) which provides the msgids.
* install-gui-msg installs mo files for all message languages but the first
  one (which messages have been compiled in by including help_mp.h)

Ingo

["nls.patch" (text/x-diff)]

Index: configure
===================================================================
--- configure	(revision 38256)
+++ configure	(working copy)
@@ -314,7 +314,7 @@
   *)    _echo_n='-n '   _echo_c=        ;;      # BSD echo
 esac
 
-msg_lang_all=$(echo help/help_mp-??.h help/help_mp-??_??.h | sed -e \
"s:help/help_mp-\(..\).h:\1:g" -e "s:help/help_mp-\(.....\).h:\1:g") \
+msg_lang_all=$(echo help/help_mp-??.h help/help_mp-??_??.h | sed -e \
"s:help/help_mp-\(..\).h:\1:g" -e "s:help/help_mp-\(.....\).h:\1:g" -e "s:en ::" -e \
"s:^:en :")  man_lang_all=$(echo DOCS/man/??/mplayer.1 DOCS/man/??_??/mplayer.1 | sed \
-e "s:DOCS/man/\(..\)/mplayer.1:\1:g" -e "s:DOCS/man/\(.._..\)/mplayer.1:\1:g")  \
doc_lang_all=$(echo DOCS/xml/??/ DOCS/xml/??_??/ | sed -e "s:DOCS/xml/\(..\)/:\1:g" \
-e "s:DOCS/xml/\(.._..\)/:\1:g")  
@@ -547,6 +547,7 @@
   --language-man=lang    language to use for the man pages [en]
   --language-msg=lang    language to use for the messages and the GUI [en]
   --language=lang        default language to use [en]
+  --enable-nls           native language support for the GUI [disable]
 Specific options override --language. You can pass a list of languages separated
 by whitespace or commas instead of a single language. Nonexisting translations
 will be dropped from each list. All documentation and man page translations
@@ -838,6 +839,7 @@
 #language=en
 _shm=auto
 _charset="UTF-8"
+_nls=no
 _dynamic_plugins=no
 _crash_debug=no
 _sighandler=yes
@@ -1303,6 +1305,8 @@
   --disable-apple-ir)   _apple_ir=no    ;;
   --enable-gui)         _gui=yes        ;;
   --disable-gui)        _gui=no         ;;
+  --enable-nls)         _nls=yes        ;;
+  --disable-nls)        _nls=no         ;;
   --enable-termcap)     _termcap=yes    ;;
   --disable-termcap)    _termcap=no     ;;
   --enable-termios)     _termios=yes    ;;
@@ -3479,6 +3483,24 @@
 echores "$_langinfo"
 
 
+echocheck "nls"
+if test "$_gui" = no; then
+  _nls=no
+fi
+echores "$_nls"
+
+
+if test "$_nls" = yes; then
+  echocheck "msgfmt"
+  if test -z "$(which msgfmt)"; then
+    echores "no"
+    echo "configure error: msgfmt not found; required for nls"
+    exit 1
+  fi
+fi
+echores "$_nls"
+
+
 echocheck "language"
 # Set preferred languages, "all" uses English as main language.
 test -z "$language" && language=$LINGUAS
@@ -3491,10 +3513,15 @@
 
 test "$language_doc" = "all" && language_doc=$doc_lang_all
 test "$language_man" = "all" && language_man=$man_lang_all
-test "$language_msg" = "all" && language_msg=en
 
+if test "$_nls" = yes; then
+  test "$language_msg" = "all" && language_msg=$msg_lang_all
+else
+  test "$language_msg" = "all" && language_msg=en
+fi
+
 # Prune non-existing translations from language lists.
-# Set message translation to the first available language.
+# Set message translation to the first available language if nls disabled.
 # Fall back on English.
 for lang in $language_doc ; do
   test -d DOCS/xml/$lang && tmp_language_doc="$tmp_language_doc $lang"
@@ -3509,11 +3536,18 @@
 test -z "$language_man" && language_man=en
 
 for lang in $language_msg ; do
-  test -f "help/help_mp-${lang}.h" && tmp_language_msg=$lang && break
+  if test -f "help/help_mp-${lang}.h"; then
+    if test "$_nls" = yes; then
+      tmp_language_msg="$tmp_language_msg $lang"
+      test -z "$language_msg_main" && language_msg_main=$lang
+    else
+     tmp_language_msg=$lang && language_msg_main=$lang && break
+    fi
+  fi
 done
 language_msg=$tmp_language_msg
-test -z "$language_msg" && language_msg=en
-_mp_help="help/help_mp-${language_msg}.h"
+test -z "$language_msg" && language_msg=en && language_msg_main=en
+_mp_help="help/help_mp-${language_msg_main}.h"
 echores "messages: $language_msg - man pages: $language_man - documentation: \
$language_doc"  
 
@@ -8594,6 +8628,7 @@
 DOC_LANG_ALL = $doc_lang_all
 MAN_LANGS = $language_man
 MAN_LANG_ALL = $man_lang_all
+MSG_LANGS = $language_msg
 
 CATALOG = $catalog
 XMLLINT_COMMAND = xmllint --noout --noent --postvalid $catalog_opts
Index: Makefile
===================================================================
--- Makefile	(revision 38256)
+++ Makefile	(working copy)
@@ -772,6 +772,12 @@
 help_mp.h: help/help_mp-en.h $(HELP_FILE)
 	help/help_create.sh $(HELP_FILE) $(CHARSET)
 
+help/po/%.po: help/help_mp-%.h help/help_mp-en.h
+	help/help_create_po.sh $< $@
+
+%.mo: %.po
+	msgfmt $< -o $@
+
 # rebuild version.h each time the working copy is updated
 version.h: version.sh $(wildcard .svn/entries .git/logs/HEAD)
 	./$< `$(CC) -dumpversion`
@@ -857,7 +863,7 @@
 install-%: %$(EXESUF) install-dirs
 	$(INSTALL) -m 755 $(INSTALLSTRIP) $< $(BINDIR)
 
-install-gui: install-mplayer install-gui-icons
+install-gui: install-mplayer install-gui-icons install-gui-msg
 	-ln -sf mplayer$(EXESUF) $(BINDIR)/gmplayer$(EXESUF)
 	$(INSTALL) -d $(DATADIR)/skins $(prefix)/share/applications
 	$(INSTALL) -m 644 etc/mplayer.desktop $(prefix)/share/applications/
@@ -864,6 +870,7 @@
 
 install-gui-icons:    $(foreach size,$(GUI_ICONSIZES),install-gui-icon-$(size))
 install-gui-man:      $(foreach lang,$(MAN_LANGS),install-gui-man-$(lang))
+install-gui-msg:      $(foreach lang,$(filter-out $(firstword \
$(MSG_LANGS)),$(MSG_LANGS)),install-gui-msg-$(lang))  install-mencoder-man: $(foreach \
lang,$(MAN_LANGS),install-mencoder-man-$(lang))  install-mplayer-man:  $(foreach \
lang,$(MAN_LANGS),install-mplayer-man-$(lang))  
@@ -888,6 +895,12 @@
 	cd $(MANDIR)/$(lang)/man1/ && ln -sf mplayer.1 gmplayer.1
 endef
 
+define GUI_MSG_RULE
+install-gui-msg-$(lang): help/po/$(lang).mo
+	$(INSTALL) -d $(prefix)/share/locale/$(lang)/LC_MESSAGES
+	$(INSTALL) -m 644 help/po/$(lang).mo \
$(prefix)/share/locale/$(lang)/LC_MESSAGES/gmplayer.mo +endef
+
 define MENCODER_MAN_RULE
 install-mencoder-man-$(lang): install-mplayer-man-$(lang)
 	cd $(MANDIR)/$(lang)/man1 && ln -sf mplayer.1 mencoder.1
@@ -901,6 +914,7 @@
 
 $(foreach size,$(GUI_ICONSIZES),$(eval $(GUI_ICON_RULE)))
 $(foreach lang,$(filter-out en,$(MAN_LANG_ALL)),$(eval $(GUI_MAN_RULE)))
+$(foreach lang,$(MSG_LANGS),$(eval $(GUI_MSG_RULE)))
 $(foreach lang,$(filter-out en,$(MAN_LANG_ALL)),$(eval $(MENCODER_MAN_RULE)))
 $(foreach lang,$(filter-out en,$(MAN_LANG_ALL)),$(eval $(MPLAYER_MAN_RULE)))
 
@@ -921,7 +935,7 @@
 	-rm -f $(VIDIX_PCI_FILES)
 	-rm -f $(call ADD_ALL_EXESUFS,codec-cfg cpuinfo)
 	-rm -f codecs.conf.h help_mp.h version.h
-	-rm -rf DOCS/tech/doxygen DOCS/HTML
+	-rm -rf DOCS/tech/doxygen DOCS/HTML help/po
 
 distclean: clean
 	-$(MAKE) -C ffmpeg $@
@@ -1112,6 +1126,8 @@
 .PHONY: checkheaders *clean tests check_checksums fatetest checkhelp
 .PHONY: doc html-chunked* html-single* xmllint*
 
+.PRECIOUS: help/po/%.po
+
 # Disable suffix rules.  Most of the builtin rules are suffix rules,
 # so this saves some time on slow systems.
 .SUFFIXES:


[Attachment #4 (text/plain)]

_______________________________________________
MPlayer-dev-eng mailing list
MPlayer-dev-eng@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic