summarylogtreecommitdiffstats
path: root/better-language-and-version-support.patch
blob: 8dacf1d317538efe15ff4e30b7180795265ae0c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
--- listadmin.pl	2012-09-24 09:40:53.412571168 +0200
+++ listadmin.pl.patched	2012-09-24 09:41:24.788602950 +0200
@@ -722,7 +722,7 @@
     }
 
     my $data;
-    if ($mmver eq "2.1") {
+    if ($mmver ge "2.1") {
 	my $parse_appr = HTML::TokeParser->new(\$page_appr) || die;
 	$data = parse_pages_mm_2_1($mmver, $config, $parse, $parse_appr);
     } else {
@@ -768,14 +768,26 @@
     my %data = ();
     my $headline;
 
+    # some (newer?) servers show only 1 <hr> tag when there is no subscriptions
+    # Try resolve first seen <hr> as subscription, and fall back to approvals
     $parse_subs->get_tag ("hr");
     if ($parse_subs->get_tag ("h2")) {
-	parse_subscriptions ($mmver, $config, $parse_subs, \%data);
-    }
-
-    $parse_appr->get_tag ("hr");
-    if ($parse_appr->get_tag ("h2")) {
-	parse_approvals ($mmver, $config, $parse_appr, \%data);
+	my $title = $parse_subs->get_trimmed_text ("/h2") || die;
+	if ($title =~ get_trans_re("subscriptions")) {
+	    parse_subscriptions ($mmver, $config, $parse_subs, \%data);
+
+	    $parse_appr->get_tag ("hr");
+	    if ($parse_appr->get_tag ("h2")) {
+		parse_approvals ($mmver, $config, $parse_appr, \%data);
+	    }
+	} else {
+	    parse_approvals ($mmver, $config, $parse_appr, \%data);
+	}
+    } else {
+	$parse_appr->get_tag ("hr");
+	if ($parse_appr->get_tag ("h2")) {
+	    parse_approvals ($mmver, $config, $parse_appr, \%data);
+	}
     }
     return (\%data);
 }
@@ -833,42 +845,325 @@
     #
     # Please send additions if you have them.
 
+    # Below strings are found in source of Mailman 2.1.10 and "washed":
+    # * high-bit chars and html ligatures in latin charsets replaced with .*
+    #   (\S would be better but for some reason the code chokes on that)
+    # * non-latin charsets included as-is and (if not already) as utf-8
+    # * trailing punctuation stripped (to allow small changes to locales)
     my %translations =
+	     # grep -ri -- '<title>' templates/*/admlogin.html
 	    ("authentication" =>
 	     {
-	      "en" => "authentication",
-	      "de" => "Authentifikation",
-	      "fr" => "authentification",
+	      "ar" => "التحقق من الشخصية لـ .* للقائمة",
+	      "ca" => "Authentication",
+	      "cs" => "p.*ihl.*en.*",
+	      "da" => "Login",
+	      # include old string (possibly bogusly grabbed from PO file)
+	      "de" => "Anmeldung|Authentifikation",
+	      "en" => "Authentication",
+	      "es" => "Autentificaci.*n",
+	      "et" => "autoriseerimine",
+	      "eu" => "Zerrendako .* Identifikatzen",
+	      "fi" => "Authentication",
+	      "fr" => "Authentification",
+	      "gl" => "Autenticaci.*n",
+	      "he" => "האימות של",
+	      "hr" => "Autentikacija",
+	      "hu" => "Azonos.*t.*s",
+	      "ia" => "Authentication",
+	      "it" => "Autenticazione",
+	      # | recode EUC-JP..utf8
+	      "ja" => "ǧ|認証",
+	      # | recode EUC-KR..utf8
+	      "ko" => " |관리자 인증",
+	      "lt" => "prisijungimas",
+	      "nl" => "inloggen",
+	      "no" => "Innlogging",
+	      "pl" => "%(listname)s",
+	      "pt" => "Authentication",
+	      "pt_BR" => "Autentica.*o",
+	      "ro" => "Autentificare",
+	      # | recode koi8-r..utf8
+	      "ru" => "|Аутентификация",
+	      "sk" => "prihlásenie",
+	      "sl" => "Avtentikacija",
+	      "sr" => "Authentication",
+	      "sv" => "Inloggning",
+	      "tr" => "Giri.*i",
+	      "uk" => "Автентифікація",
+	      "vi" => "Xác th.*c",
+	      "zh_CN" => "Authentication",
+	      "zh_TW" => "論壇 壇主驗證",
+	     },
+	     # grep -r -A 1 'msgid "Subscription Requests"' messages/*
+	     "subscriptions" =>
+	     {
+	      "C" => "Subscription Requests",
+	      "ar" => "طلبات التسجيل",
+	      "ca" => "Petici.* de Subscripci.*",
+	      "cs" => "Po.*adavky na p.*ihl.*en",
+	      "da" => "Anmoder om medlemskab",
+	      "de" => "Abonnement-Anfragen",
+	      "es" => "Peticiones de suscripci.*n",
+	      "et" => "Liitumisssoovid",
+	      "eu" => "Harpidetza Eskakizunak",
+	      "fi" => "Liittymispyynt.*j.*",
+	      "fr" => "Requ.*tes d'abonnement",
+	      "gl" => "Solicitudes de subscrici.*n",
+	      "he" => "בקשות מנוי",
+	      "hr" => "Zahtjevi za Pretplatom",
+	      "hu" => "Feliratkozási k.*relmek",
+	      "ia" => "Requestas de abonamento",
+	      "it" => "Richieste di iscrizione",
+	      # | recode EUC-JP..utf8
+	      "ja" => "|入会申請",
+	      # | recode EUC-KR..utf8
+	      "ko" => " |가입 결과",
+	      "lt" => "Uþsisakymo Pra.*ymas",
+	      "nl" => "Aanmeldingsverzoeken",
+	      "no" => "S.*knader om medlemskap",
+	      "pl" => "Pro.*by o zapisanie",
+	      "pt" => "Pedidos de inscri.*o",
+	      "pt_BR" => "Requisi.*es de Inscri.*o",
+	      "ro" => "Cereri de abonare",
+	      # | recode koi8-r..utf8
+	      "ru" => "  |Запросы на подписку",
+	      "sk" => ".*iadosti o prihl.*senie",
+	      "sl" => "Zahteve za prijavo",
+	      "sr" => "Захтјеви за упис",
+	      "sv" => "Ans.*kningar om medlemskap",
+	      "tr" => "Listeye .*yelik .*stekleri",
+	      "uk" => "Запити на підписку",
+	      "vi" => "Y.*u c.*u .*ng k.*",
+	      "zh_CN" => "订阅请求",
+	      "zh_TW" => "訂閱申請",
 	     },
+	     # grep -r -A 1 'msgid "Successfully \(subscribed\|Unsubscribed\|Removed\):"' messages/*
 	     "subscr_success" =>
 	     {
-	      "en" => "Successfully ((un)?subscribed|Removed)",
-	      "de" => "Erfolgreich (ein|aus)getragen",
+	      # include old (mistyped, or are these case-insensitive?) uppercase
+	      "C" => "Successfully (([uU]n)?subscribed|Removed)",
+	      "ar" => "تم اشتراكه بنجاح|خطأ في تسجيل الاشتراك|تمت إزالته بنجاح",
+	      "ca" => "Subscrit satisfact.*riament|Subscripci.* Cancel.*lada Satisfact.*riament|Eliminat satisfact.*riament",
+	      "cs" => ".*sp.*n.* p.*ihl.*eni|.*sp.*n.* odhl.*eni|.*sp.*n.* odstran.*ni",
+	      "da" => "Tilmelding er sket|Framelding udf.*rt|Framelding udf.*rt",
+	      "de" => "Erfolgreich (eingetragen|beendete Abonnements|entfernt)",
+	      "es" => "(Subscritos|Ha anulado su suscripci.*n|Ha sido borrado) satisfactoriamente",
+	      "et" => "Lisati aadressid|Tellimus l.*petati|Edukalt eemaldatud",
+	      "eu" => "Behar bezala harpidetuta|Behar Bezala Ezabatuta|Arrakastaz ezabatua",
+	      "fi" => "Onnistuneesti liitetty|Erotettu onnistuneesti|Poistettu onnistuneesti",
+	      "fr" => "Abonnement r.*ussi|R.*siliation r.*ussie|Abonnement r.*sili.* avec succ.*s",
+	      "gl" => "Subscribiuse con éxito|Anulou a súa subscrición satisfactoriamente|Eliminouse satisfactoriamente",
+	      "he" => "נרשם בהצלחה|מנוי בוטל בהצלחה|הוסר בהצלחה",
+	      "hr" => "Uspje.*no (pretpla.*eni|Odjavljeni|Maknut)",
+	      "hu" => "Sikeresen (fel.*rva|t.*r.*lve|t.*r.*lve)",
+	      "ia" => "(Abonate|Disabonate|Removite) con successo",
+	      "it" => "(Iscritti|Cancellati|Rimosso) con successo",
+	      # | recode EUC-JP..utf8
+	      "ja" => "(||)³λ|(入|退|退)会手続き完了",
+	      # | recode EUC-KR..utf8
+	      "ko" => " (Ե|Ż|ŵ) |성공적으로 (가입된|탈퇴된|제거된) 명단",
+	      "lt" => "S.*kmingai (u.*sisak.*|atsisak.*|pa.*alinti)",
+	      "nl" => "Met succes (aangemeld|afgemeld|verwijderd)",
+	      "no" => "(P.*melding|Utmelding) utf.*rt",
+	      "pl" => "Pomy.*lnie (zapisano|wypisano|usuni.*to)",
+	      "pt" => "(Inscrito|Inscri.*o anulada|Removido) co?m sucesso",
+	      "pt_BR" => "(Inscrito|Descadastrado|Removido) com [sS]ucesso",
+	      "ro" => "Au fost (abona.*i|dezabona.*i) cu succes",
+	      # | recode koi8-r..utf8
+	      "ru" => " (|  |)|Успешно (подписаны|удалена подписка для|удалены)",
+	      "sk" => "Úspe.*ne (prihlásení|odhlásení|zmazaní)",
+	      "sl" => "Uspe.*no (prijavljeni|odjavljen|odstranjeni)",
+	      "sr" => "Успјешно (уписани|исписани|уклоњени)",
+	      "sv" => "(Anm.*lan|Avanmlan) gjord",
+	      "tr" => "Ba.*ar.*yla (.*ye yap.*ld.*|.*yelikten .*kar.*ld.*|Silindi)",
+	      "uk" => "Успішно (підписано|видалено підписку|видалено)",
+	      "vi" => "Đã đăng ký được|Đã bỏ đăng ký được|Đã gỡ bỏ được",
+	      "zh_CN" => "成功订阅|成功取消订阅|成功删除",
+	      "zh_TW" => "訂閱成功|退訂成功|成功除名",
 	     },
+	     # grep -r -A 1 'msgid "Error \(subscribing\|Unsubscribing\):"' messages/*
 	     "subscr_error" =>
 	     {
-	      "en" => "Error (un)?subscribing",
+	      # include old (mistyped, or are these case-insensitive?) uppercase
+	      "C" => "Error ([uU]n)?subscribing",
+	      "ar" => "خطأ في (الاشتراك|إلغاء الاشتراك)",
+	      "ca" => "Error (subscrivint|cancel.*lant la subscripci.*)",
+	      "cs" => "Chyba p.*i (p.*ihla.*ov.*n.*|odhla.*ov.*n.*)",
+	      "da" => "Fejl under (tilmelding|framelding)",
+	      "de" => "Fehler beim (Abonnieren|Beenden des Abonnement)",
+	      "es" => "Error dando de (alta|baja) la suscripci.*n",
+	      "et" => "Viga aadresside lisamisel|Viga aadressi kustutamisel",
+	      "eu" => "Errorea harpidetzan|Zerrenda uztean errorea",
+	      "fi" => "Virhe (liitt.*ess.*|eroamisessa)",
+	      "fr" => "Erreur lors de (l'abonnement|la r.*siliation)",
+	      "gl" => "(Houbo un erro ao dar de alta|Produciuse un erro ao dar de baixa) a subscrición",
+	      "he" => "שגיאה (ברישום|בביטול המנוי)",
+	      "hr" => "Gre.*ka kod (pretpla.*ivanja|Odjavljivanja)",
+	      "hu" => "Hiba a (feliratkoz.*skor|t*rl*sn*l)",
+	      "ia" => "Error in (abonar|disabonar)",
+	      "it" => "Errore durante (l'iscrizione|la cancellazione)",
+	      # | recode EUC-JP..utf8
+	      "ja" => "(|)³Υ顼|(入|退)会手続きのエラー",
+	      # | recode EUC-KR..utf8
+	      "ko" => "(|Ż) |(가입|탈퇴) 에러",
+	      "lt" => "Nes.*kmingai u.*sisakin.*jo|Klaida atsisakant",
+	      "nl" => "Fout bij (het aanmelden|afmelden)",
+	      "no" => "Feil under (p.*melding|utmelding)",
+	      "pl" => "B.*dy przy (za|wy)pisywaniu",
+	      "pt" => "Erro (inscrevendo|ao cancelar a inscri.*o)",
+	      "pt_BR" => "Erro ao (inscrever|descadastrar)",
+	      "ro" => "Eroare la (abonare|dezabonare)",
+	      # | recode koi8-r..utf8
+	      "ru" => "  |  |Подписаны НЕ были|Ошибка удаления подписки",
+	      "sk" => "Chyba pri (prihlasovan.*|odhlasovan.*)",
+	      "sl" => "Napaka pri (prijavljanju|odjavi)",
+	      "sr" => "Грешка при (у|uc)пису",
+	      "sv" => "Fel under (anm.*lan|avanm.*lan)",
+	      "tr" => "(.*ye yaparken|.*yelikten .*kar.*l.*rken) hata oldu",
+	      "uk" => "Помилка (при спробі|видалення) підписки",
+	      "vi" => "Lỗi đăng ký|Lỗi bỏ đăng ký",
+	      "zh_CN" => "错误(取)?订阅",
+	      "zh_TW" => "訂閱失敗|退訂時出錯",
 	     },
+	     # grep -r -A 1 'msgid "No such list .*"' messages/*
 	     "no_such_list" =>
 	     {
-	      "en" => "Mailman Admindb Error.*No such list:",
+	      "C" => "No such list",
+	      "ar" => "لا يوجد قائمة بالإسم",
+	      "ca" => "La llista .* no existeix",
+	      "cs" => "Nenalezl jsem konferenci",
+	      "da" => "Listen findes ikke",
+	      "de" => "(Keine Liste mit Namen .* vorhanden|Liste nicht vorhanden)",
+	      "es" => "(La lista .* no existe|No existe tal lista)",
+	      "et" => "(Sellist listi pole|Selle nimega listi pole)",
+	      "eu" => "(zerrendarik ez dago|Zerrenda ezezaguna)",
+	      "fi" => "(Listaa .* ei ole olemassa|Lista on jo olemassa)",
+	      "fr" => "(Liste inexistante|Liste introuvable)",
+	      "gl" => "(A rolda .* non existe|Non existe esa rolda)",
+	      "he" => "(אין רשימה בשם|אין כזו רשימה)",
+	      "hr" => "Takva lista ne postoji <em>%(safelistname)s</em>",
+	      "hu" => "Nincs .* nev.* lista",
+	      "ia" => "(Le lista .* non existe|Nulle tal lista)",
+	      "it" => "Non esiste .*la lista",
+	      # | recode EUC-JP..utf8
+	      "ja" => "ȤꥹȤϤޤ|というリストはありません",
+	      # | recode EUC-KR..utf8
+	      "ko" => " ϸ Ʈ  ʽϴ|라는 메일링 리스트가 존재하지 않습니다.",
+	      "lt" => "N.*ra forumo",
+	      "nl" => "Er is geen lijst met de naam",
+	      "no" => "Listen finnes ikke",
+	      "pl" => "Nie znaleziono listy|Nie ma takiej listy",
+	      "pt" => "N.*o existe essa lista|Lista inexistente",
+	      "pt_BR" => "Lista .*inexistente",
+	      "ro" => "Nu exist.* lista|Lista aceata nu exist.*",
+	      # | recode koi8-r..utf8
+	      "ru" => "  .* |Список рассылки .*не существует",
+	      "sk" => "Neznáma .*konferencia",
+	      "sl" => "Seznam .*ne obstaja",
+	      "sr" => "Нема листе",
+	      "sv" => "Listan finns inte",
+	      "tr" => "ad.*nda bir liste yok",
+	      "uk" => "Список розсилки .*не існує",
+	      "vi" => "Không có hộp thư (chung|như vậy)",
+	      "zh_CN" => "没有类似的列表|没有这个列表",
+	      "zh_TW" => "(沒有.*這個|無此)論壇",
 	     },
+	     # head -n 2 templates/*/admindbsummary.html
+	     # grep -r -A 1 'msgid "There are no pending requests."' messages/*
 	     "pending_req" =>
 	     {
-	      "en" => "(current set of administrative|pending request)",
-	      "de" => "(gegenw&auml;rtigen administrativen|unbearbeiteten Anfragen)",
+	      "C" => "There are no pending requests",
+	      "ar" => "تحتوي هذه الصفحة على تلخيص للطلبات الإشرافية|لا يوجد طلبات معلقة",
+	      "ca" => "Aquesta p.*gina cont.* un sumari del conjunt actual de peticions administratives|No hi ha peticions pendents",
+	      "cs" => "P.*ehled po.*adavk.* pro konferenci|.*dn.* po.*adavky ne.*ekaj.* na vy.*zen.*",
+	      "da" => "Her finder du en oversigt over anmodninger der skal vurderes for maillisten|Der venter ingen anmodninger",
+	      "de" => "Diese Seite zeigt eine .*bersicht der gegenw.*rtigen administrativen|Keine unbearbeiteten Anfragen",
+	      "en" => "This page contains a summary of the current set of administrative",
+	      "es" => "Esta página contiene un sumario de las solicitudes administrativas que|No hay peticiones pendientes",
+	      "et" => "Sellel lehel on ülevaade kõigist||Taotlusi pole",
+	      "eu" => "Orri honetan .* posta zerrendan|Ez dago eskaerarik zain",
+	      "fi" => "Tällä sivulla on lista toimiasi vaativista|Ei odottavia pyynt.*j.*",
+	      "fr" => "Cette page contient un r.*sum.* de l'ensemble des requ.*tes|Pas de requ.*tes en instance",
+	      "gl" => "Esta páxina cont.*n un sumario das solicitudes administrativas que|Non hai ningunha solicitude pendente",
+	      "he" => "עמוד זה מכיל סיכום של קבוצת כל הבקשות המנהלתיות שדורשות|אין בקשות ממתינות",
+	      "hr" => "Ova stranica sadr.*i sa.*etak trenutnog skupa administrativnih zahtjeva|Nema zahtjeva na .*ekanju",
+	      "hu" => "Ezen az oldalon .* levelezõlistához.* tartozó beavatkozásra|Nincsen beavatkoz.*sra v.*r.* teend.*",
+	      "ia" => "Iste pagina contine un summario del collection del requestas|Il non ha requestas pendente",
+	      "it" => "Questa pagina contiene la lista delle richieste amministrative|Non ci sono richieste in attesa",
+	      "ja" => "Υڡ|このページは|αοϤޤ|保留中の申請はありません",
+	      "ko" => "  .* ϸ Ʈ|이 페이지는 .* 메일링 리스트| û ϴ|대기중인 요청이 없습니다",
+	      "lt" => "Sprendimo laukian.*i.* lai.*k.* santrauka|There are no pending requests",
+	      "nl" => "Deze pagina toont een overzicht van alle administratieve verzoeken m.b.t. de .* maillijst die wachten op uw goedkeuring|Er zijn geen wachtende verzoeken",
+	      "no" => "Her finner du en oversikt over foresp.*rsler som skal vurderes for epostlisten|Det venter ingen foresp.*rsler eller s.*knader",
+	      "pl" => "This page contains a summary of the current set of administrative|Brak skolejkowanych zada.*",
+	      "pt" => "Esta p.*gina cont.*m um sum.*rio dos pedidos administrativos da lista|N.*o h.* pedidos pendentes",
+	      "pt_BR" => "Esta p.*gina cont.*m um resumo do conjunto atual de requisi.*es|N.*o existem requisi.*es pendentes",
+	      "ro" => "Aceast.* pagin.* con.*ine un sumar al setului curent de cereri administrative|Nu sunt cereri .*n a.*teptare",
+	      "ru" => "       |Эта страница содержит сводный список требующих обработки административных| ,  |Нет запросов, требующих обработки",
+	      "sk" => "Preh.*ad po.*iadaviek pre konferenciu|.*iadne .*iadosti ne.*akaj.* na spracovanie",
+	      "sl" => "Ta stran vsebuje povzetek trenutnih skrbni.*kih zahtev, ki .*akajo|Ni .*akajo.*ih zahtev",
+	      "sr" => "Ова страна садржи преглед тренутних услова за ваше укључење у листу слања|Нема захтјева на чекању",
+	      "sv" => "H.*r finns en .*versikt .*ver f.*rfr.*gningar som ska avg.*ras f.*r e-postlistan|Inga ans.*kningar v.*ntar",
+	      "tr" => "Bu sayfa|Bekleyen istek yok",
+	      "uk" => "Ця сторінка містить загальний список адміністративних запитів|Відсутні запити, що очікують рішень",
+	      "vi" => "Trang này chứa bản tóm tắt các yêu cầu quản trị cần thiết bạn tán thành cho|Không có yêu cầu bị hoãn nào",
+	      "zh_CN" => "此页面包含.*邮件列表|没有挂起的请求",
+	      "zh_TW" => "沒有待決的事項",
 	     },
+	     # TODO: get strings from older Mailman (pre 2.1) containing this one
 	     "headline_subscr" =>
 	     {
 	      "en" => "subscription",
+	      "da" => "medlemskab",
 	     },
+	     # TODO: get strings from older Mailman (pre 2.1) containing this one
 	     "held_for_approval" =>
 	     {
 	      "en" => "held for approval",
 	     },
+	     # grep -r -A 1 'msgid "Already a member"' messages/*
 	     "already_member" =>
 	     {
-	      "en" => "Already a member",
+	      "C" => "Already a member",
+	      "ar" => "مشترك أصلاً",
+	      "ca" => "Ja ets membre",
+	      "cs" => "Je ji.* .*astn.*kem",
+	      "da" => "Allerede medlem",
+	      "de" => "Bereits Mitglied",
+	      "es" => "Ya est.* suscrito",
+	      "et" => "On juba liige",
+	      "eu" => "Dagoeneko harpidetuta",
+	      "fi" => "Jo j.*sen",
+	      "fr" => "D.*j.* abonn.*",
+	      "gl" => "Xa está subscrito",
+	      "he" => "הנו כבר מנוי",
+	      "hr" => "Ve.* je .*lan",
+	      "hu" => "M.*r tag",
+	      "ia" => "Ja es un membro",
+	      "it" => "Gi.* iscritto",
+	      # | recode EUC-JP..utf8
+	      "ja" => "˲Ǥ|既に会員です",
+	      # | recode EUC-KR..utf8
+	      "ko" => "̹ ȸԴϴ|이미 회원입니다",
+	      "lt" => "Jau dalyvis",
+	      "nl" => "Is al lid",
+	      "no" => "Allerede medlem",
+	      "pl" => "Ju.* jest zapisany",
+	      "pt" => "J.* .* um membro",
+	      "pt_BR" => "J.* .* um membro",
+	      "ro" => "Este membru deja",
+	      # | recode koi8-r..utf8
+	      "ru" => "  |Уже является подписчиком",
+	      "sk" => "Je už účastníkom",
+	      "sl" => "Je .*e .*lan",
+	      "sr" => "Корисник је већ учлањен.",
+	      "sv" => "Redan medlem",
+	      "tr" => "Zaten listeye .*ye",
+	      "uk" => "Вже є учасником",
+	      "vi" => "Đã thành viên",
+	      "zh_CN" => "已经是成员了",
+	      "zh_TW" => "已是訂戶",
 	     },
 	    );