Browse Source

Implementation of gettext, .gitignore fix

tags/0.2.0
Bandie 2 years ago
parent
commit
522e7eb3af
Signed by: Bandie <bandie@chaospott.de> GPG Key ID: C1E133BC65A822DD
8 changed files with 1921 additions and 0 deletions
  1. 1
    0
      .gitignore
  2. 1379
    0
      ABOUT-NLS
  3. 292
    0
      lib/gettext.h
  4. 2
    0
      po/LINGUAS
  5. 53
    0
      po/Makevars
  6. 5
    0
      po/POTFILES.in
  7. 97
    0
      po/de.po
  8. 92
    0
      po/pam_panic.pot

+ 1
- 0
.gitignore View File

@@ -22,6 +22,7 @@ Makefile.in.in
22 22
 po/Makevars.template
23 23
 po/POTFILES
24 24
 po/Rules-quot
25
+po/stamp-po
25 26
 po/*.header
26 27
 po/*.sed
27 28
 po/*.sin

+ 1379
- 0
ABOUT-NLS
File diff suppressed because it is too large
View File


+ 292
- 0
lib/gettext.h View File

@@ -0,0 +1,292 @@
1
+/* Convenience header for conditional use of GNU <libintl.h>.
2
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2016 Free Software
3
+   Foundation, Inc.
4
+
5
+   This program is free software: you can redistribute it and/or modify
6
+   it under the terms of the GNU General Public License as published by
7
+   the Free Software Foundation; either version 3 of the License, or
8
+   (at your option) any later version.
9
+
10
+   This program is distributed in the hope that it will be useful,
11
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+   GNU General Public License for more details.
14
+
15
+   You should have received a copy of the GNU General Public License
16
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
+
18
+#ifndef _LIBGETTEXT_H
19
+#define _LIBGETTEXT_H 1
20
+
21
+/* NLS can be disabled through the configure --disable-nls option.  */
22
+#if ENABLE_NLS
23
+
24
+/* Get declarations of GNU message catalog functions.  */
25
+# include <libintl.h>
26
+
27
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
28
+   the gettext() and ngettext() macros.  This is an alternative to calling
29
+   textdomain(), and is useful for libraries.  */
30
+# ifdef DEFAULT_TEXT_DOMAIN
31
+#  undef gettext
32
+#  define gettext(Msgid) \
33
+     dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
34
+#  undef ngettext
35
+#  define ngettext(Msgid1, Msgid2, N) \
36
+     dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
37
+# endif
38
+
39
+#else
40
+
41
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
42
+   chokes if dcgettext is defined as a macro.  So include it now, to make
43
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
44
+   as well because people using "gettext.h" will not include <libintl.h>,
45
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
46
+   is OK.  */
47
+#if defined(__sun)
48
+# include <locale.h>
49
+#endif
50
+
51
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
52
+   <libintl.h>, which chokes if dcgettext is defined as a macro.  So include
53
+   it now, to make later inclusions of <libintl.h> a NOP.  */
54
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
55
+# include <cstdlib>
56
+# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H
57
+#  include <libintl.h>
58
+# endif
59
+#endif
60
+
61
+/* Disabled NLS.
62
+   The casts to 'const char *' serve the purpose of producing warnings
63
+   for invalid uses of the value returned from these functions.
64
+   On pre-ANSI systems without 'const', the config.h file is supposed to
65
+   contain "#define const".  */
66
+# undef gettext
67
+# define gettext(Msgid) ((const char *) (Msgid))
68
+# undef dgettext
69
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
70
+# undef dcgettext
71
+# define dcgettext(Domainname, Msgid, Category) \
72
+    ((void) (Category), dgettext (Domainname, Msgid))
73
+# undef ngettext
74
+# define ngettext(Msgid1, Msgid2, N) \
75
+    ((N) == 1 \
76
+     ? ((void) (Msgid2), (const char *) (Msgid1)) \
77
+     : ((void) (Msgid1), (const char *) (Msgid2)))
78
+# undef dngettext
79
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
80
+    ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
81
+# undef dcngettext
82
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
83
+    ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N))
84
+# undef textdomain
85
+# define textdomain(Domainname) ((const char *) (Domainname))
86
+# undef bindtextdomain
87
+# define bindtextdomain(Domainname, Dirname) \
88
+    ((void) (Domainname), (const char *) (Dirname))
89
+# undef bind_textdomain_codeset
90
+# define bind_textdomain_codeset(Domainname, Codeset) \
91
+    ((void) (Domainname), (const char *) (Codeset))
92
+
93
+#endif
94
+
95
+/* Prefer gnulib's setlocale override over libintl's setlocale override.  */
96
+#ifdef GNULIB_defined_setlocale
97
+# undef setlocale
98
+# define setlocale rpl_setlocale
99
+#endif
100
+
101
+/* A pseudo function call that serves as a marker for the automated
102
+   extraction of messages, but does not call gettext().  The run-time
103
+   translation is done at a different place in the code.
104
+   The argument, String, should be a literal string.  Concatenated strings
105
+   and other string expressions won't work.
106
+   The macro's expansion is not parenthesized, so that it is suitable as
107
+   initializer for static 'char[]' or 'const char[]' variables.  */
108
+#define gettext_noop(String) String
109
+
110
+/* The separator between msgctxt and msgid in a .mo file.  */
111
+#define GETTEXT_CONTEXT_GLUE "\004"
112
+
113
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
114
+   MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
115
+   short and rarely need to change.
116
+   The letter 'p' stands for 'particular' or 'special'.  */
117
+#ifdef DEFAULT_TEXT_DOMAIN
118
+# define pgettext(Msgctxt, Msgid) \
119
+   pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
120
+#else
121
+# define pgettext(Msgctxt, Msgid) \
122
+   pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
123
+#endif
124
+#define dpgettext(Domainname, Msgctxt, Msgid) \
125
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
126
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
127
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
128
+#ifdef DEFAULT_TEXT_DOMAIN
129
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
130
+   npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
131
+#else
132
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
133
+   npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
134
+#endif
135
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
136
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
137
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
138
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
139
+
140
+#ifdef __GNUC__
141
+__inline
142
+#else
143
+#ifdef __cplusplus
144
+inline
145
+#endif
146
+#endif
147
+static const char *
148
+pgettext_aux (const char *domain,
149
+              const char *msg_ctxt_id, const char *msgid,
150
+              int category)
151
+{
152
+  const char *translation = dcgettext (domain, msg_ctxt_id, category);
153
+  if (translation == msg_ctxt_id)
154
+    return msgid;
155
+  else
156
+    return translation;
157
+}
158
+
159
+#ifdef __GNUC__
160
+__inline
161
+#else
162
+#ifdef __cplusplus
163
+inline
164
+#endif
165
+#endif
166
+static const char *
167
+npgettext_aux (const char *domain,
168
+               const char *msg_ctxt_id, const char *msgid,
169
+               const char *msgid_plural, unsigned long int n,
170
+               int category)
171
+{
172
+  const char *translation =
173
+    dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
174
+  if (translation == msg_ctxt_id || translation == msgid_plural)
175
+    return (n == 1 ? msgid : msgid_plural);
176
+  else
177
+    return translation;
178
+}
179
+
180
+/* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
181
+   can be arbitrary expressions.  But for string literals these macros are
182
+   less efficient than those above.  */
183
+
184
+#include <string.h>
185
+
186
+#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
187
+     /* || __STDC_VERSION__ >= 199901L */ )
188
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
189
+#else
190
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
191
+#endif
192
+
193
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
194
+#include <stdlib.h>
195
+#endif
196
+
197
+#define pgettext_expr(Msgctxt, Msgid) \
198
+  dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
199
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
200
+  dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
201
+
202
+#ifdef __GNUC__
203
+__inline
204
+#else
205
+#ifdef __cplusplus
206
+inline
207
+#endif
208
+#endif
209
+static const char *
210
+dcpgettext_expr (const char *domain,
211
+                 const char *msgctxt, const char *msgid,
212
+                 int category)
213
+{
214
+  size_t msgctxt_len = strlen (msgctxt) + 1;
215
+  size_t msgid_len = strlen (msgid) + 1;
216
+  const char *translation;
217
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
218
+  char msg_ctxt_id[msgctxt_len + msgid_len];
219
+#else
220
+  char buf[1024];
221
+  char *msg_ctxt_id =
222
+    (msgctxt_len + msgid_len <= sizeof (buf)
223
+     ? buf
224
+     : (char *) malloc (msgctxt_len + msgid_len));
225
+  if (msg_ctxt_id != NULL)
226
+#endif
227
+    {
228
+      int found_translation;
229
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
230
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
231
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
232
+      translation = dcgettext (domain, msg_ctxt_id, category);
233
+      found_translation = (translation != msg_ctxt_id);
234
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
235
+      if (msg_ctxt_id != buf)
236
+        free (msg_ctxt_id);
237
+#endif
238
+      if (found_translation)
239
+        return translation;
240
+    }
241
+  return msgid;
242
+}
243
+
244
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
245
+  dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
246
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
247
+  dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
248
+
249
+#ifdef __GNUC__
250
+__inline
251
+#else
252
+#ifdef __cplusplus
253
+inline
254
+#endif
255
+#endif
256
+static const char *
257
+dcnpgettext_expr (const char *domain,
258
+                  const char *msgctxt, const char *msgid,
259
+                  const char *msgid_plural, unsigned long int n,
260
+                  int category)
261
+{
262
+  size_t msgctxt_len = strlen (msgctxt) + 1;
263
+  size_t msgid_len = strlen (msgid) + 1;
264
+  const char *translation;
265
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
266
+  char msg_ctxt_id[msgctxt_len + msgid_len];
267
+#else
268
+  char buf[1024];
269
+  char *msg_ctxt_id =
270
+    (msgctxt_len + msgid_len <= sizeof (buf)
271
+     ? buf
272
+     : (char *) malloc (msgctxt_len + msgid_len));
273
+  if (msg_ctxt_id != NULL)
274
+#endif
275
+    {
276
+      int found_translation;
277
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
278
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
279
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
280
+      translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
281
+      found_translation = !(translation == msg_ctxt_id || translation == msgid_plural);
282
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
283
+      if (msg_ctxt_id != buf)
284
+        free (msg_ctxt_id);
285
+#endif
286
+      if (found_translation)
287
+        return translation;
288
+    }
289
+  return (n == 1 ? msgid : msgid_plural);
290
+}
291
+
292
+#endif /* _LIBGETTEXT_H */

+ 2
- 0
po/LINGUAS View File

@@ -0,0 +1,2 @@
1
+# Languages
2
+de

+ 53
- 0
po/Makevars View File

@@ -0,0 +1,53 @@
1
+# Makefile variables for PO directory in any package using GNU gettext.
2
+
3
+# Usually the message domain is the same as the package name.
4
+DOMAIN = $(PACKAGE)
5
+
6
+# These two variables depend on the location of this directory.
7
+subdir = po
8
+top_builddir = ..
9
+
10
+# These options get passed to xgettext.
11
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
12
+
13
+# This is the copyright holder that gets inserted into the header of the
14
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
15
+# package.  (Note that the msgstr strings, extracted from the package's
16
+# sources, belong to the copyright holder of the package.)  Translators are
17
+# expected to transfer the copyright for their translations to this person
18
+# or entity, or to disclaim their copyright.  The empty string stands for
19
+# the public domain; in this case the translators are expected to disclaim
20
+# their copyright.
21
+COPYRIGHT_HOLDER = Bandie <bandie@chaospott.de>
22
+
23
+# This is the email address or URL to which the translators shall report
24
+# bugs in the untranslated strings:
25
+# - Strings which are not entire sentences, see the maintainer guidelines
26
+#   in the GNU gettext documentation, section 'Preparing Strings'.
27
+# - Strings which use unclear terms or require additional context to be
28
+#   understood.
29
+# - Strings which make invalid assumptions about notation of date, time or
30
+#   money.
31
+# - Pluralisation problems.
32
+# - Incorrect English spelling.
33
+# - Incorrect formatting.
34
+# It can be your email address, or a mailing list address where translators
35
+# can write to without being subscribed, or the URL of a web page through
36
+# which the translators can contact you.
37
+MSGID_BUGS_ADDRESS = https://github.com/pampanic/pam_panic
38
+
39
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
40
+# message catalogs shall be used.  It is usually empty.
41
+EXTRA_LOCALE_CATEGORIES =
42
+
43
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
44
+# context.  Possible values are "yes" and "no".  Set this to yes if the
45
+# package uses functions taking also a message context, like pgettext(), or
46
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
47
+USE_MSGCTXT = no
48
+
49
+# These options get passed to msgmerge.
50
+# Useful options are in particular:
51
+#   --previous            to keep previous msgids of translated messages,
52
+#   --quiet               to reduce the verbosity.
53
+MSGMERGE_OPTIONS =

+ 5
- 0
po/POTFILES.in View File

@@ -0,0 +1,5 @@
1
+# The sources which contains output strings
2
+src/pam_panic/pam_panic.c
3
+src/pam_panic/pam_panic_authdevice.c
4
+src/pam_panic/pam_panic_password.c
5
+src/pam_panic_pw/pam_panic_pw.c

+ 97
- 0
po/de.po View File

@@ -0,0 +1,97 @@
1
+# German translations for pam_panic package
2
+# German translation for pam_panic.
3
+# Copyright (C) 2018 Bandie <bandie@chaospott.de>
4
+# This file is distributed under the same license as the pam_panic package.
5
+#  <bandie@chaospott.de>, 2018.
6
+#
7
+msgid ""
8
+msgstr ""
9
+"Project-Id-Version: pam_panic 0.2.0\n"
10
+"Report-Msgid-Bugs-To: https://github.com/pampanic/pam_panic\n"
11
+"POT-Creation-Date: 2018-09-21 22:52+0200\n"
12
+"PO-Revision-Date: 2018-09-20 21:03+0200\n"
13
+"Last-Translator:  <bandie@chaospott.de>\n"
14
+"Language-Team: German\n"
15
+"Language: de\n"
16
+"MIME-Version: 1.0\n"
17
+"Content-Type: text/plain; charset=UTF-8\n"
18
+"Content-Transfer-Encoding: 8bit\n"
19
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
+
21
+#: src/pam_panic/pam_panic.c:39
22
+msgid "CRITICAL: Problem with regcomp."
23
+msgstr "CRITICAL: Problem mit regcomp."
24
+
25
+#: src/pam_panic/pam_panic.c:116
26
+msgid ""
27
+"ERROR: Arguments invalid. Note that \"allow\" and \"reject\" must have a "
28
+"valid GPT UUID."
29
+msgstr ""
30
+"ERROR: Argument ungültig. Hinweis: \"allow\" und \"reject\" müssen eine "
31
+"valide GPT UUID aufweisen."
32
+
33
+#: src/pam_panic/pam_panic.c:152
34
+msgid "ALERT for argument \"serious\": Device doesn't exist."
35
+msgstr "ALERT für Argument \"serious\": Gerät existiert nicht."
36
+
37
+#: src/pam_panic/pam_panic_authdevice.c:37
38
+msgid "Key? "
39
+msgstr "Schlüssel? "
40
+
41
+#: src/pam_panic/pam_panic_authdevice.c:39
42
+msgid "Couldn't identify any key after 3 tries."
43
+msgstr "Konnte keinen Schlüssel nach 3 Versuchen identifizieren."
44
+
45
+#: src/pam_panic/pam_panic_password.c:31
46
+msgid "ALERT for passwort option: No password file detected."
47
+msgstr "ALERT für Passwort-Option: Keine Passwort-Datei gefunden."
48
+
49
+#: src/pam_panic/pam_panic_password.c:36
50
+msgid "ERROR: Couldn't open password file."
51
+msgstr "ERROR: Konnte Passwort-Datei nicht öffnen."
52
+
53
+#: src/pam_panic/pam_panic_password.c:48
54
+msgid "CRITICAL: Password file is corrupt!"
55
+msgstr "CRITICAL: Passwort-Datei ist beschädigt!"
56
+
57
+#: src/pam_panic/pam_panic_password.c:93
58
+msgid "Password: "
59
+msgstr "Passwort: "
60
+
61
+#: src/pam_panic_pw/pam_panic_pw.c:28
62
+#, c-format
63
+msgid "ERROR opening file!\n"
64
+msgstr ""
65
+
66
+#: src/pam_panic_pw/pam_panic_pw.c:64
67
+msgid "Key password: "
68
+msgstr "Schlüsselpasswort: "
69
+
70
+#: src/pam_panic_pw/pam_panic_pw.c:65
71
+msgid "Panic password: "
72
+msgstr "Panikpasswort: "
73
+
74
+#: src/pam_panic_pw/pam_panic_pw.c:66
75
+msgid "Retype key password: "
76
+msgstr "Schlüsselpasswort wiederholen: "
77
+
78
+#: src/pam_panic_pw/pam_panic_pw.c:67
79
+msgid "Retype panic password: "
80
+msgstr "Panikpasswort wiederholen: "
81
+
82
+#: src/pam_panic_pw/pam_panic_pw.c:73
83
+#, c-format
84
+msgid "Please run this program under root. Write access to %s is mandatory.\n"
85
+msgstr ""
86
+"Dieses Programm muss als root ausgeführt werden. Schreibrechte auf %s sind "
87
+"dabei notwendig.\n"
88
+
89
+#: src/pam_panic_pw/pam_panic_pw.c:96
90
+#, c-format
91
+msgid "Didn't work. Bye.\n"
92
+msgstr "Hat nicht funktioniert. Tschüss.\n"
93
+
94
+#: src/pam_panic_pw/pam_panic_pw.c:99
95
+#, c-format
96
+msgid "Password didn't match. Try again.\n"
97
+msgstr "Passwort stimmt nicht überein. Bitte noch einmal versuchen.\n"

+ 92
- 0
po/pam_panic.pot View File

@@ -0,0 +1,92 @@
1
+# SOME DESCRIPTIVE TITLE.
2
+# Copyright (C) YEAR Bandie <bandie@chaospott.de>
3
+# This file is distributed under the same license as the pam_panic package.
4
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+#
6
+#, fuzzy
7
+msgid ""
8
+msgstr ""
9
+"Project-Id-Version: pam_panic 0.2.0\n"
10
+"Report-Msgid-Bugs-To: https://github.com/pampanic/pam_panic\n"
11
+"POT-Creation-Date: 2018-09-21 22:55+0200\n"
12
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+"Language-Team: LANGUAGE <LL@li.org>\n"
15
+"Language: \n"
16
+"MIME-Version: 1.0\n"
17
+"Content-Type: text/plain; charset=CHARSET\n"
18
+"Content-Transfer-Encoding: 8bit\n"
19
+
20
+#: src/pam_panic/pam_panic.c:39
21
+msgid "CRITICAL: Problem with regcomp."
22
+msgstr ""
23
+
24
+#: src/pam_panic/pam_panic.c:116
25
+msgid ""
26
+"ERROR: Arguments invalid. Note that \"allow\" and \"reject\" must have a "
27
+"valid GPT UUID."
28
+msgstr ""
29
+
30
+#: src/pam_panic/pam_panic.c:152
31
+msgid "ALERT for argument \"serious\": Device doesn't exist."
32
+msgstr ""
33
+
34
+#: src/pam_panic/pam_panic_authdevice.c:37
35
+msgid "Key? "
36
+msgstr ""
37
+
38
+#: src/pam_panic/pam_panic_authdevice.c:39
39
+msgid "Couldn't identify any key after 3 tries."
40
+msgstr ""
41
+
42
+#: src/pam_panic/pam_panic_password.c:31
43
+msgid "ALERT for passwort option: No password file detected."
44
+msgstr ""
45
+
46
+#: src/pam_panic/pam_panic_password.c:36
47
+msgid "ERROR: Couldn't open password file."
48
+msgstr ""
49
+
50
+#: src/pam_panic/pam_panic_password.c:48
51
+msgid "CRITICAL: Password file is corrupt!"
52
+msgstr ""
53
+
54
+#: src/pam_panic/pam_panic_password.c:93
55
+msgid "Password: "
56
+msgstr ""
57
+
58
+#: src/pam_panic_pw/pam_panic_pw.c:28
59
+#, c-format
60
+msgid "ERROR opening file!\n"
61
+msgstr ""
62
+
63
+#: src/pam_panic_pw/pam_panic_pw.c:64
64
+msgid "Key password: "
65
+msgstr ""
66
+
67
+#: src/pam_panic_pw/pam_panic_pw.c:65
68
+msgid "Panic password: "
69
+msgstr ""
70
+
71
+#: src/pam_panic_pw/pam_panic_pw.c:66
72
+msgid "Retype key password: "
73
+msgstr ""
74
+
75
+#: src/pam_panic_pw/pam_panic_pw.c:67
76
+msgid "Retype panic password: "
77
+msgstr ""
78
+
79
+#: src/pam_panic_pw/pam_panic_pw.c:73
80
+#, c-format
81
+msgid "Please run this program under root. Write access to %s is mandatory.\n"
82
+msgstr ""
83
+
84
+#: src/pam_panic_pw/pam_panic_pw.c:96
85
+#, c-format
86
+msgid "Didn't work. Bye.\n"
87
+msgstr ""
88
+
89
+#: src/pam_panic_pw/pam_panic_pw.c:99
90
+#, c-format
91
+msgid "Password didn't match. Try again.\n"
92
+msgstr ""

Loading…
Cancel
Save