mirror of
https://github.com/vim/vim.git
synced 2025-10-06 05:44:14 -04:00
patch 8.2.1544: cannot translate messages in a Vim script
Problem: Cannot translate messages in a Vim script. Solution: Add gettext(). Try it out for a few messages in the options window.
This commit is contained in:
@@ -97,6 +97,7 @@ static void f_getreg(typval_T *argvars, typval_T *rettv);
|
||||
static void f_getreginfo(typval_T *argvars, typval_T *rettv);
|
||||
static void f_getregtype(typval_T *argvars, typval_T *rettv);
|
||||
static void f_gettagstack(typval_T *argvars, typval_T *rettv);
|
||||
static void f_gettext(typval_T *argvars, typval_T *rettv);
|
||||
static void f_haslocaldir(typval_T *argvars, typval_T *rettv);
|
||||
static void f_hasmapto(typval_T *argvars, typval_T *rettv);
|
||||
static void f_hlID(typval_T *argvars, typval_T *rettv);
|
||||
@@ -667,6 +668,7 @@ static funcentry_T global_functions[] =
|
||||
{"gettabvar", 2, 3, FEARG_1, ret_any, f_gettabvar},
|
||||
{"gettabwinvar", 3, 4, FEARG_1, ret_any, f_gettabwinvar},
|
||||
{"gettagstack", 0, 1, FEARG_1, ret_dict_any, f_gettagstack},
|
||||
{"gettext", 1, 1, FEARG_1, ret_string, f_gettext},
|
||||
{"getwininfo", 0, 1, FEARG_1, ret_list_dict_any, f_getwininfo},
|
||||
{"getwinpos", 0, 1, FEARG_1, ret_list_number, f_getwinpos},
|
||||
{"getwinposx", 0, 0, 0, ret_number, f_getwinposx},
|
||||
@@ -3437,6 +3439,26 @@ f_gettagstack(typval_T *argvars, typval_T *rettv)
|
||||
get_tagstack(wp, rettv->vval.v_dict);
|
||||
}
|
||||
|
||||
/*
|
||||
* "gettext()" function
|
||||
*/
|
||||
static void
|
||||
f_gettext(typval_T *argvars, typval_T *rettv)
|
||||
{
|
||||
if (argvars[0].v_type != VAR_STRING
|
||||
|| argvars[0].vval.v_string == NULL
|
||||
|| *argvars[0].vval.v_string == NUL)
|
||||
{
|
||||
semsg(_(e_invarg2), tv_get_string(&argvars[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = vim_strsave(
|
||||
(char_u *)_(argvars[0].vval.v_string));
|
||||
}
|
||||
}
|
||||
|
||||
// for VIM_VERSION_ defines
|
||||
#include "version.h"
|
||||
|
||||
|
@@ -36,6 +36,7 @@ all: $(MOFILES) $(MOCONVERTED) $(MSGFMT_DESKTOP)
|
||||
|
||||
check: $(CHECKFILES)
|
||||
|
||||
# installing for real
|
||||
install: $(MOFILES) $(MOCONVERTED)
|
||||
@$(MAKE) prefixcheck
|
||||
for lang in $(LANGUAGES); do \
|
||||
@@ -61,6 +62,24 @@ uninstall:
|
||||
rm -f $(LOCALEDIR)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
|
||||
done
|
||||
|
||||
# installing for local tryout into ../../runtime/lang
|
||||
tryoutinstall: $(MOFILES) $(MOCONVERTED)
|
||||
@$(MAKE) prefixcheck
|
||||
for lang in $(LANGUAGES); do \
|
||||
dir=../../runtime/lang/$$lang/; \
|
||||
if test ! -x "$$dir"; then \
|
||||
mkdir $$dir; chmod 755 $$dir; \
|
||||
fi; \
|
||||
dir=../../runtime/lang/$$lang/LC_MESSAGES; \
|
||||
if test ! -x "$$dir"; then \
|
||||
mkdir $$dir; chmod 755 $$dir; \
|
||||
fi; \
|
||||
if test -r $$lang.mo; then \
|
||||
cp $$lang.mo $$dir/$(PACKAGE).mo; \
|
||||
chmod 644 $$dir/$(PACKAGE).mo; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
converted: $(MOCONVERTED)
|
||||
|
||||
# nl.po was added later, if it does not exist use a file with just a # in it
|
||||
@@ -158,12 +177,34 @@ distclean: clean
|
||||
checkclean:
|
||||
rm -f *.ck
|
||||
|
||||
$(PACKAGE).pot: ../*.c ../if_perl.xs ../GvimExt/gvimext.cpp ../globals.h ../if_py_both.h ../vim.h gvim.desktop.in vim.desktop.in
|
||||
cd ..; $(XGETTEXT) --default-domain=$(PACKAGE) \
|
||||
--add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 \
|
||||
*.c if_perl.xs GvimExt/gvimext.cpp globals.h if_py_both.h vim.h \
|
||||
po/gvim.desktop.in po/vim.desktop.in
|
||||
mv -f ../$(PACKAGE).po $(PACKAGE).pot
|
||||
PO_INPUTLIST = \
|
||||
../*.c \
|
||||
../if_perl.xs \
|
||||
../GvimExt/gvimext.cpp \
|
||||
../globals.h \
|
||||
../if_py_both.h \
|
||||
../vim.h \
|
||||
gvim.desktop.in \
|
||||
vim.desktop.in
|
||||
|
||||
PO_VIM_INPUTLIST = \
|
||||
../../runtime/optwin.vim
|
||||
|
||||
PO_VIM_JSLIST = \
|
||||
optwin.js
|
||||
|
||||
$(PACKAGE).pot: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
|
||||
# Convert the Vim scripts to (what looks like) Javascript
|
||||
$(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
|
||||
# create vim.pot
|
||||
$(XGETTEXT) --default-domain=$(PACKAGE) --add-comments \
|
||||
--keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 \
|
||||
$(PO_INPUTLIST) $(PO_VIM_JSLIST)
|
||||
mv -f $(PACKAGE).po $(PACKAGE).pot
|
||||
# Fix Vim scripts names, so that "gf" works
|
||||
$(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
|
||||
# Delete the temporary files
|
||||
rm *.js
|
||||
|
||||
vim.desktop: vim.desktop.in $(POFILES)
|
||||
echo $(LANGUAGES) | tr " " "\n" |sed -e '/\./d' | sort > LINGUAS
|
||||
|
@@ -78,7 +78,8 @@ language.
|
||||
|
||||
(2) Translate
|
||||
See the gettext documentation on how to do this. You can also find
|
||||
examples in the other po files.
|
||||
examples in the other po files. You can use "gF" on the file name to see
|
||||
the context of the message.
|
||||
Search the po file for items that require translation:
|
||||
|
||||
/fuzzy\|^msgstr ""\(\n"\)\@!
|
||||
@@ -123,6 +124,13 @@ language.
|
||||
|
||||
Look out for syntax errors and fix them.
|
||||
|
||||
(6) Local tryout:
|
||||
Vim normally picks up the .mo files from:
|
||||
$VIMRUNTIME/lang/{lang}/LC_MESSAGES/vim.mo
|
||||
To try out the messages with Vim use:
|
||||
make tryoutinstall
|
||||
And run Vim with $VIMRUNTIME set to ../runtime
|
||||
|
||||
|
||||
USING GETTEXT WITHOUT ICONV
|
||||
|
||||
|
13
src/po/fixfilenames.vim
Normal file
13
src/po/fixfilenames.vim
Normal file
@@ -0,0 +1,13 @@
|
||||
" Invoked with the name "vim.pot" and a list of Vim script names.
|
||||
" Converts them to a .js file, stripping comments, so that xgettext works.
|
||||
|
||||
set shortmess+=A
|
||||
|
||||
for name in argv()[1:]
|
||||
let jsname = fnamemodify(name, ":t:r") .. ".js"
|
||||
exe "%s+" .. jsname .. "+" .. name .. "+"
|
||||
endfor
|
||||
|
||||
write
|
||||
last
|
||||
quit
|
18
src/po/tojavascript.vim
Normal file
18
src/po/tojavascript.vim
Normal file
@@ -0,0 +1,18 @@
|
||||
" Invoked with the name "vim.pot" and a list of Vim script names.
|
||||
" Converts them to a .js file, stripping comments, so that xgettext works.
|
||||
" Javascript is used because, like Vim, it accepts both single and double
|
||||
" quoted strings.
|
||||
|
||||
set shortmess+=A
|
||||
|
||||
for name in argv()[1:]
|
||||
exe 'edit ' .. fnameescape(name)
|
||||
|
||||
" Strip comments
|
||||
g/^\s*"/s/.*//
|
||||
|
||||
" Write as .js file, xgettext recognizes them
|
||||
exe 'w! ' .. fnamemodify(name, ":t:r") .. ".js"
|
||||
endfor
|
||||
|
||||
quit
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1544,
|
||||
/**/
|
||||
1543,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user