Page MenuHomePhabricator

Internationalize Phabricator
Closed, DuplicatePublic

Subscribers
Tokens
"Like" token, awarded by ofbeaton."Like" token, awarded by JOY."Love" token, awarded by yaserkh."Love" token, awarded by Luke081515.2."Like" token, awarded by CaptSpot."Mountain of Wealth" token, awarded by Gryllida."Like" token, awarded by vint.
Assigned To
None
Authored By
epriestley, Apr 19 2012

Description

Although we haven't had much in the way of requests for internationalization, it would be good to come up with a plan of action and maybe lay in some groundwork for it since I think we'll want to offer it eventually. At the very least, we effectively support two text corpuses right now anyway, "English" and "English (Serious Business)". It would be nice to support these formally through a translation system, so it can be a per-user setting instead of a global setting and I can answer claims that some of the buttons labeled "Submit" aren't serious enough more directly.

General context:

  • I think we have sufficiently few text strings and a sufficiently technical audience that we can do contributor-translation rather than user-translation.
  • I don't think we need description/context strings, since the audience is technical and the source is available -- we can do string extraction reliably via XHPAST and annotate string tables with file/line information for translators to provide more context. For example, one could imagine the primary source of translation data being a text file that looks like this:
~
// Translate the 'English' string into 'English (Serious Business)' on the line underneath.
// This string is used in these places:
//    src/applications/differential/view/addcomment/DifferentialAddCommentView.php:112
~
Clowncopterize
~
Submit
~
  • I don't think we need fbtc() (common strings) since it was mostly a community-sanity thing?
  • We can probably push RTL languages to v2?
  • We should be well-situated technically to implement this since we do everything in utf8 already and mostly use utf8-aware methods to manipulate text. The View classes should generally handle rendering text-like objects gracefully. There may be some exceptions with collation, but I think this is generally not too important.

Stuff I'm less sure about:

  • Do we need all the magic around people and numbers that Facebook had? Can we accept lower-quality translations for the gender/plural breakouts? As I understand it, a made-up example is a string like "{user} accepted this revision.", which might use a different verb for "accepted" in some languages depending on the gender of "{user}". Maybe we can just make sure the pht()-style function accepts the most-general sorts of objects (e.g., PhabricatorUser, PhabricatorObjectHandle) and deal with this later/never.
  • I think we can use the English text as the translation key in all cases? Are there cases where "Cancel" should translate into different things in different languages? The UI is generally so straightforward that I think we'll have fairly few cases of this. We can fake it by writing the source in some proto-language and translating some strings in English to drop contextual information. Or we could actually implement descriptions.
  • Do we need to support any HTML? Really hoping we can get away without this, or with a complete punt like supporting only a tiny micro-language with bold.
  • Do we actually need to do this? We have a fair number of non-English tweets about Phabricator and seem to be getting some adoption in Europe, but have been able to fake our way through this issue so far. Programming languages also tend to be implemented in English and some things won't reasonably be translatable (like URIs and the API), so it's not clear there's a huge amount of motivation for this.

Rough implementation plan:

  • Write some pht()-style function and wrap all user-displayed text in it, pht("{user} accepted this revision.", $user);.
  • This returns some AphrontTranslatedStringView object which behaves like a normal view and can be magicked up later as necessary.
  • Use XHPAST to extract all the strings into some kind of translation file (this file should have the most-human-readable format possible).
  • Build the human-readable file into a machine-readable file.
  • At runtime, check the machine-readable version for strings.

Details

Differential Revisions
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Commits
D11747 / rPd4680a7e4e84: Update Phabricator to work with more modular translations
D11746 / rARC8f8fe44b05a4: Update arcanist to work with more modular translations
D11745 / rPHU4252753ed7b9: Make translations more modular so third-party libraries can translate their…
D8138 / rP0726411cb490: Write a very basic string extractor
D8139 / rPHUae84814b1688: Allow PHPAST to evalStatic() an n_CONCATENATION_LIST of static nodes

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
vrana changed file(s), attached 0: ; detached 0: .Jun 16 2012, 6:26 AM
vrana changed file(s), attached 0: ; detached 0: .
vrana added a comment.Jun 16 2012, 2:07 PM

I thinks that translating list separator ', ' is not worth the effort.

Agreed, that's pretty low-value. Chinese users are unlikely to care much if you're using "," or "、" for list separators even though the latter is technically the correct mark. Anyone who writes or reads code is plenty used to seeing ",".

vrana changed file(s), attached 0: ; detached 0: .Jun 17 2012, 4:18 PM
vrana changed file(s), attached 0: ; detached 0: .Jun 20 2012, 6:23 PM

T1321 is about dateformat and internationalization. I made it depend on this task.

vrana changed file(s), attached 0: ; detached 0: .Jun 20 2012, 7:36 PM
vrana changed file(s), attached 0: ; detached 0: .Jun 21 2012, 5:23 PM
vrana changed file(s), attached 0: ; detached 0: .Jun 22 2012, 10:31 PM
vrana added a comment.Aug 5 2012, 5:16 AM

It's starting to be unclear whether we expect HTML or plain text as pht() input and output. We use it as plain text on some places (1, 2) and as HTML on other places (1, 2). However the context is unknown to translator.

We should decide on the format before it's too late. Using HTML is a bad idea because we need plain text in some contexts and we would need to be really careful about XSS. But we will probably need some formatting to not degrade current function e.g. in DifferentialChangesetParser.

Assuming that we never allow unreviewed/untrusted translations, is XSS really an issue? It can only occur if translators add malicious tags (or tag fragments), right? Conceivably we could leave it undefined and just make sure we don't accept any pull requests which translate "Submit" into <script src="http://www.evil.com/evil.js">? This is a little flimsy as a solution since theoretically we should support that translation, but it doesn't seem completely unreasonable to leave context implicit rather than explicit.

I think we sometimes need to emit HTML (e.g., epriestley updated T123 where both parts are links) and sometimes plain text (e.g., strings passed to UI elements that always escape their inputs), so if we do need to make this explicit maybe we need to introduce a class like HTML (now called XSS I think?) from the Facebook codebase to mark strings as already-escaped.

I suspect we could also remove all uses of in-string tags; I believe there are very few and they don't contribute much to the application.

sgrimm added a comment.Aug 5 2012, 7:22 PM

If you have a human (or a sufficiently trustworthy and robust bot)
screening translations for XSS, then it's reasonable to allow HTML in my
opinion. The two big reasons we didn't do it for Facebook were the
security concerns and the concern that, since random end users of no
particular technical background would be doing translations, they would
unwittingly screw up the HTML in non-malicious but nonetheless horrible
ways. The second concern seems less relevant for Phabricator, though
perhaps not a complete nonissue.

One idea we kicked around that seems possibly useful in this context was
to allow HTML tags if and only if those exact tags were present in the
original string. So, e.g., you couldn't add <i> if the original string
had <h1>, and if the original string didn't have any tags then you
couldn't add any at all. This gets a bit tricky since not all languages
do emphasis the same way, though.

vrana added a comment.Aug 6 2012, 6:12 PM

My idea was providing function pht_html() which will call phutil_escape_html() before substituting placeholders but it will not work with strings like 'File was <strong>added</strong>'.

Limiting translations to same amount of special characters seems reasonable.

vrana edited this Maniphest Task.Aug 6 2012, 6:14 PM
alanh renamed this task from Internationalize Phabriator to Internationalize Phabricator.Aug 7 2012, 12:29 AM

Uh. Sorry if there was a reason for that. It just bugged me every time I saw it. >.<

alanh added a subscriber: alanh.Aug 7 2012, 12:31 AM
alanh removed a subscriber: alanh.
vrana edited this Maniphest Task.Nov 13 2012, 12:35 AM
vrana edited this Maniphest Task.
chad added a subscriber: chad.Nov 14 2012, 4:23 AM
vrana edited this Maniphest Task.Apr 23 2013, 6:04 PM
epriestley changed the visibility from "All Users" to "Public (No Login Required)".Feb 3 2014, 9:55 PM
epriestley edited this Maniphest Task.Feb 4 2014, 12:33 AM
epriestley edited this Maniphest Task.Feb 4 2014, 12:36 AM
epriestley edited this Maniphest Task.Feb 5 2014, 1:33 PM
epriestley edited this Maniphest Task.Feb 5 2014, 7:02 PM
witrin added a subscriber: witrin.Mar 12 2014, 9:50 PM
timor added a subscriber: timor.EditedMay 13 2014, 2:52 PM

Commenting on the initial discussion: "You need to know English to write almost any code anyway."
I think that although one must be fluent enough in english to write code, the other features do not necessarily have that 'restriction'. At our place we could use Maniphest and its Board features for organizing non-coding work. However, some of the people which are involved would have a very hard time understanding the english interface

Yeah, that description was written two years ago when Phabricator was almost entirely focused on technical users (for example, boards did not exist yet). Internationalization is certainly more important now than it was then, and will continue to become more important in the future.

The good news is that we've also made a lot of progress on it in the last two years. I believe most of the remaining work is just performing the actual translations.

I can translate to pt-br. How do I help?

Pt-br is Brazilian Portuguese, BTW.

I added src/infrastructure/internationalization/translation/PhabricatorPortugueseTranslation.php. I called arc liberate. I restarted phabricator (e.g phd {stop|start}) but I don't Portuguese available anywhere. What am I missing?

I missed reloading php. I'll spare this task from any pt-br specifics. Future updates here: T5174: Add Portuguese (Brazil) to Phabricator.

vint added a subscriber: vint.Jun 1 2014, 7:36 PM

◀ Merged tasks: T5174.

revi added a subscriber: revi.Oct 25 2014, 2:05 PM
hyOzd added a subscriber: hyOzd.Jan 6 2015, 1:01 PM

I can help translating phabricator to Polish (pl_PL).

gpaumier removed a subscriber: gpaumier.Feb 11 2015, 8:39 PM

I hope facilities for supporting non-Gregorian calendar systems such as Persian calendar or Hijri calendar is built into architecture of Phabricator.

I hope the same about right-to-left (RTL) languages such as Persian and Arabic and right-to-left UI layout. Let me note the need for bidirectional text (e.g. mixed Persian and English) entry facilities too. :)

J5lx added a subscriber: J5lx.Jun 3 2015, 9:50 PM

Suggesting to prioritise this task. Non-English interface on Phabricator would be useful, as it would let people file non-English bugs. This is useful for two purposes:

  • Development initiatives within non-English-speaking Chapters. While there usually is at least one English-speaking person within the Chapter who could handle the translation, it would be more convenient for them to have the list of non-English issues on phabricator and translate them routinely than having them on a piece of paper and file them "later". This way the reporter is up-to-date on the progress of the bug, and the bug tracker is there to dump everything on it in the first place so that things are not lost.
  • Gathering feedback from end users. This is more interesting: I saw Mozilla come to it over the years to the extent of establishing a special 'user feedback' tag on their issue tracker, and writing a special code on their knowledge base site for users to type their problem and submit it to bugzilla without interacting with bugzilla directly (this knowledge base site is aggressively multilingual with lots of readers in each language for about a decade at least).

Now, I don't have to do all this, because the information freedom movement does not need to be centralized; I should be free to mirror any Wikimedia project and play with my software issue tracker whimsicals there, and leave you with the task of needing to merge my software and my content back at your discretion. But the way Mozilla does the international scope of the movement is nice and I would not mind it if Wikimedia considered following it, as it would unleash some more potential and merging back would be easier, as you would be informed of the things happening at these non-English projects. :-)

Internationalization is very important for non-technical users. I'll contribute a German translation.

Internationalization is very important for non-technical users. I'll contribute a German translation.

1<?php
2
3final class PhabricatorGermanTranslation
4 extends PhutilTranslation {
5
6 public function getLocaleCode() {
7 return 'de_DE';
8 }
9
10 protected function getTranslations() {
11 return array(
12 'No daemon(s) with id(s) "%s" exist!' => array(
13 'Es existiert kein Dienst mit der id %s !',
14 'Es existieren keine Dienste mit den ids %s !',
15 ),
16 'These %d configuration value(s) are related:' => array(
17 'Dieser Konfigurationswert ist zugehörig:',
18 'Diese Konfigurationswerte sind zugehörig:',
19 ),
20 '%s Task(s)' => array('Aufgabe', 'Aufgaben'),
21
22 '%s ERROR(S)' => array('FEHLER', 'FEHLER'),
23 '%d Error(s)' => '%d Fehler',
24 '%d Warning(s)' => array('%d Warnung', '%d Warnungen'),
25 '%d Auto-Fix(es)' => array('%d Auto-Fix', '%d Auto-Fixes'),
26 '%d Advice(s)' => array('%d Ratschlag', '%d Ratschläge'),
27 '%d Detail(s)' => array('%d Detail', '%d Details'),
28
29 '(%d line(s))' => array('(%d Zeile)', '(%d Zeilen)'),
30
31 '%d line(s)' => array('%d Zeile', '%d Zeilen'),
32 '%d path(s)' => array('%d Pfad', '%d Pfade'),
33 '%d diff(s)' => array('%d diff', '%d diffs'),
34
35 '%d Answer(s)' => array('eine Antwort', '%d Antworten'),
36 'Show %d Comment(s)' => array('Zeige einen Kommentar', 'Zeige %d Kommentare'),
37
38 '%s DIFF LINK(S)' => array('DIFF LINK', 'DIFF LINKS'),
39 'You successfully created %d diff(s).' => array(
40 'Du hast erfolgreich %d diff erstellt.',
41 'Du hast erfolgreich %d diffs erstellt.',
42 ),
43 'Diff creation failed; see body for %s error(s).' => array(
44 'Diff Erstellung fehlgeschlagen; siehe Hauptteil für Fehlermeldung.',
45 'Diff Erstellung fehlgeschlagen; siehe Hauptteil für Fehlermeldungen.',
46 ),
47
48 'There are %d raw fact(s) in storage.' => array(
49 'There is %d raw fact in storage.',
50 'There are %d raw facts in storage.',
51 ),
52
53 'There are %d aggregate fact(s) in storage.' => array(
54 'There is %d aggregate fact in storage.',
55 'There are %d aggregate facts in storage.',
56 ),
57
58 '%d Commit(s) Awaiting Audit' => array(
59 'ein Commit erwartet Audit',
60 '%d Commits erwarten Audit',
61 ),
62
63 '%d Problem Commit(s)' => array(
64 '%d Problem Commit',
65 '%d Problem Commits',
66 ),
67
68 '%d Review(s) Blocking Others' => array(
69 '%d Review blockiert Andere',
70 '%d Reviews blockieren Andere',
71 ),
72
73 '%d Review(s) Need Attention' => array(
74 '%d Review benötigt Aufmerksamkeit',
75 '%d Reviews benötigen Aufmerksamkeit',
76 ),
77
78 '%d Review(s) Waiting on Others' => array(
79 '%d Review Waiting on Others',
80 '%d Reviews Waiting on Others',
81 ),
82
83 '%d Active Review(s)' => array(
84 '%d Active Review',
85 '%d Active Reviews',
86 ),
87
88 '%d Flagged Object(s)' => array(
89 '%d Flagged Object',
90 '%d Flagged Objects',
91 ),
92
93 '%d Object(s) Tracked' => array(
94 '%d Object Tracked',
95 '%d Objects Tracked',
96 ),
97
98 '%d Assigned Task(s)' => array(
99 '%d zugeteilte Aufgabe',
100 '%d zugeteilte Aufgaben',
101 ),
102
103 'Show %d Lint Message(s)' => array(
104 'Zeige %d Lint Nachricht',
105 'Zeige %d Lint Nachrichten',
106 ),
107 'Hide %d Lint Message(s)' => array(
108 'Verberge eine Lint Nachricht',
109 'Verberge %d Lint Nachrichten',
110 ),
111
112 'This is a binary file. It is %s byte(s) in length.' => array(
113 'Dies ist eine Binärdatei. Sie ist %s byte groß.',
114 'Dies ist eine Binärdatei. Sie ist %s bytes groß.',
115 ),
116
117 '%d Action(s) Have No Effect' => array(
118 'Aktion hat keine Auswirkung',
119 '%d Aktionen haben keine Auswirkung',
120 ),
121
122 '%d Action(s) With No Effect' => array(
123 'Aktion ohne Auswirkung',
124 '%d Aktionen ohne Auswirkung',
125 ),
126
127 'Some of your %d action(s) have no effect:' => array(
128 'Eine deiner %d Aktionen hat keine Auswirkung:',
129 'Einige deiner %d Aktionen haben keine Auswirkung:',
130 ),
131
132 'Apply remaining %d action(s)?' => array(
133 'Verbleibende Aktion ausführen?',
134 'Verbleibende Aktionen ausführen?',
135 ),
136
137 'Apply %d Other Action(s)' => array(
138 'Verbleibende Aktion anwenden',
139 'Verbleibende Aktionen anwenden',
140 ),
141
142 'The %d action(s) you are taking have no effect:' => array(
143 'Die momentane Aktion hat keine Auswirkung:',
144 'Die momentanen Aktionen haben keine Auswirkung:',
145 ),
146
147 '%s edited member(s), added %d: %s; removed %d: %s.' =>
148 '%s bearbeitete Mitglieder, hinzugefügt: %3$s; entfernt: %5$s.',
149
150 '%s added %s member(s): %s.' => array(
151 array(
152 '%s fügte ein Mitglied hinzu: %3$s.',
153 '%s fügte Mitglieder hinzu: %3$s.',
154 ),
155 ),
156
157 '%s removed %s member(s): %s.' => array(
158 array(
159 '%s entfernte ein Mitglied: %3$s.',
160 '%s entfernte Mitglieder: %3$s.',
161 ),
162 ),
163
164 '%s edited project(s), added %s: %s; removed %s: %s.' =>
165 '%s bearbeitete Projekte, hinzugefügt: %3$s; entfernt: %5$s.',
166
167 '%s added %s project(s): %s.' => array(
168 array(
169 '%s fügte ein Projekt hinzu: %3$s.',
170 '%s fügte Projekte hinzu: %3$s.',
171 ),
172 ),
173
174 '%s removed %s project(s): %s.' => array(
175 array(
176 '%s entfernte ein Projekt: %3$s.',
177 '%s entfernte Projekte: %3$s.',
178 ),
179 ),
180
181 '%s merged %d task(s): %s.' => array(
182 array(
183 '%s führte eine Aufgabe zusammen: %3$s.',
184 '%s führte Aufgaben zusammen: %3$s.',
185 ),
186 ),
187
188 '%s merged %d task(s) %s into %s.' => array(
189 array(
190 '%s führte %3$s in %4$s zusammen.',
191 '%s führte Aufgaben %3$s in %4$s zusammen.',
192 ),
193 ),
194
195 '%s added %s voting user(s): %s.' => array(
196 array(
197 '%s fügte ein Wähler hinzu: %3$s.',
198 '%s fügte Wähler hinzu: %3$s.',
199 ),
200 ),
201
202 '%s removed %s voting user(s): %s.' => array(
203 array(
204 '%s entfernte einen Wähler: %3$s.',
205 '%s entfernte Wähler: %3$s.',
206 ),
207 ),
208
209 '%s added %s blocking task(s): %s.' => array(
210 array(
211 '%s fügte eine blockierende Aufgabe hinzu: %3$s.',
212 '%s fügte blockierende Aufgaben hinzu: %3$s.',
213 ),
214 ),
215
216 '%s added %s blocked task(s): %s.' => array(
217 array(
218 '%s fügte eine blockierte Aufgabe hinzu: %3$s.',
219 '%s fügte blockierte Aufgaben hinzu: %3$s.',
220 ),
221 ),
222
223 '%s removed %s blocking task(s): %s.' => array(
224 array(
225 '%s entfernte eine blockierende Aufgabe: %3$s.',
226 '%s entfernte blockierende Aufgaben: %3$s.',
227 ),
228 ),
229
230 '%s removed %s blocked task(s): %s.' => array(
231 array(
232 '%s entfernte eine blockierte Aufgabe: %3$s.',
233 '%s entfernte blockierte Aufgaben: %3$s.',
234 ),
235 ),
236
237 '%s added %s blocking task(s) for %s: %s.' => array(
238 array(
239 '%s fügte eine blockierende Aufgabe zu %3$s hinzu: %4$s.',
240 '%s fügte blockierende Aufgaben for %3$s hinzu: %4$s.',
241 ),
242 ),
243
244 '%s added %s blocked task(s) for %s: %s.' => array(
245 array(
246 '%s fügte eine blockierte Aufgabe zu %3$s hinzu: %4$s.',
247 '%s fügte blockierte Aufgaben zu %3$s hinzu: %4$s.',
248 ),
249 ),
250
251 '%s removed %s blocking task(s) for %s: %s.' => array(
252 array(
253 '%s entfernte eine blockierende Aufgabe von %3$s: %4$s.',
254 '%s entfernte blockierende Aufgaben von %3$s: %4$s.',
255 ),
256 ),
257
258 '%s removed %s blocked task(s) for %s: %s.' => array(
259 array(
260 '%s entfernte eine blockierte Aufgabe for %3$s: %4$s.',
261 '%s entfernte blockierte Aufgaben for %3$s: %4$s.',
262 ),
263 ),
264
265 '%s edited blocking task(s), added %s: %s; removed %s: %s.' =>
266 '%s bearbeitete blockierende Aufgaben, hinzugefügt: %3$s; entfernt: %5$s.',
267
268 '%s edited blocking task(s) for %s, added %s: %s; removed %s: %s.' =>
269 '%s bearbeitete blockierende Aufgaben for %s, hinzugefügt: %4$s; entfernte: %6$s.',
270
271 '%s edited blocked task(s), added %s: %s; removed %s: %s.' =>
272 '%s bearbeitete blockierte Aufgaben, hinzugefügt: %3$s; entfernt: %5$s.',
273
274 '%s edited blocked task(s) for %s, added %s: %s; removed %s: %s.' =>
275 '%s bearbeitete blockierte Aufgaben for %s, hinzugefügt: %4$s; entfernte: %6$s.',
276
277 '%s edited answer(s), added %s: %s; removed %d: %s.' =>
278 '%s bearbeitete Antworten, hinzugefügt: %3$s; entfernt: %5$s.',
279
280 '%s added %s answer(s): %s.' => array(
281 array(
282 '%s fügte eine Antwort hinzu: %3$s.',
283 '%s fügte Antworten hinzu: %3$s.',
284 ),
285 ),
286
287 '%s removed %s answer(s): %s.' => array(
288 array(
289 '%s entfernte eine Antwort: %3$s.',
290 '%s entfernte Antworten: %3$s.',
291 ),
292 ),
293
294 '%s edited question(s), added %s: %s; removed %s: %s.' =>
295 '%s bearbeitete Fragen, hinzugefügt: %3$s; entfernt: %5$s.',
296
297 '%s added %s question(s): %s.' => array(
298 array(
299 '%s fügte eine Frage hinzu: %3$s.',
300 '%s fügte Fragen hinzu: %3$s.',
301 ),
302 ),
303
304 '%s removed %s question(s): %s.' => array(
305 array(
306 '%s entfernte ein Frage: %3$s.',
307 '%s entfernte Fragen: %3$s.',
308 ),
309 ),
310
311 '%s edited mock(s), added %s: %s; removed %s: %s.' =>
312 '%s bearbeitete mocks, hinzugefügt: %3$s; entfernt: %5$s.',
313
314 '%s added %s mock(s): %s.' => array(
315 array(
316 '%s fügte ein mock hinzu: %3$s.',
317 '%s fügte mocks hinzu: %3$s.',
318 ),
319 ),
320
321 '%s removed %s mock(s): %s.' => array(
322 array(
323 '%s entfernte ein mock: %3$s.',
324 '%s entfernte mocks: %3$s.',
325 ),
326 ),
327
328 '%s added %s task(s): %s.' => array(
329 array(
330 '%s fügte eine Aufgabe hinzu: %3$s.',
331 '%s fügte Aufgaben hinzu: %3$s.',
332 ),
333 ),
334
335 '%s removed %s task(s): %s.' => array(
336 array(
337 '%s entfernte eine Aufgabe: %3$s.',
338 '%s entfernte Aufgaben: %3$s.',
339 ),
340 ),
341
342 '%s edited file(s), added %s: %s; removed %s: %s.' =>
343 '%s bearbeitete Dateien, hinzugefügt: %3$s; entfernt: %5$s.',
344
345 '%s added %s file(s): %s.' => array(
346 array(
347 '%s fügte eine Datei hinzu: %3$s.',
348 '%s fügte Dateien hinzu: %3$s.',
349 ),
350 ),
351
352 '%s removed %s file(s): %s.' => array(
353 array(
354 '%s entfernte eine Datei: %3$s.',
355 '%s entfernte Dateien: %3$s.',
356 ),
357 ),
358
359 '%s edited contributor(s), added %s: %s; removed %s: %s.' =>
360 '%s bearbeitete contributors, hinzugefügt: %3$s; entfernt: %5$s.',
361
362 '%s added %s contributor(s): %s.' => array(
363 array(
364 '%s fügte ein contributor hinzu: %3$s.',
365 '%s fügte contributors hinzu: %3$s.',
366 ),
367 ),
368
369 '%s removed %s contributor(s): %s.' => array(
370 array(
371 '%s entfernte ein contributor: %3$s.',
372 '%s entfernte contributors: %3$s.',
373 ),
374 ),
375
376 '%s edited %s reviewer(s), added %s: %s; removed %s: %s.' =>
377 '%s bearbeitete reviewers, hinzugefügt: %4$s; entfernte: %6$s.',
378
379 '%s edited %s reviewer(s) for %s, added %s: %s; removed %s: %s.' =>
380 '%s bearbeitete reviewers for %3$s, hinzugefügt: %5$s; entfernte: %7$s.',
381
382 '%s added %s reviewer(s): %s.' => array(
383 array(
384 '%s fügte ein reviewer hinzu: %3$s.',
385 '%s fügte reviewers hinzu: %3$s.',
386 ),
387 ),
388
389 '%s added %s reviewer(s) for %s: %s.' => array(
390 array(
391 '%s fügte einen reviewer zu %3$s hinzu: %4$s.',
392 '%s added reviewers for %3$s: %4$s.',
393 ),
394 ),
395
396 '%s removed %s reviewer(s): %s.' => array(
397 array(
398 '%s entfernte einen reviewer: %3$s.',
399 '%s entfernte reviewers: %3$s.',
400 ),
401 ),
402
403 '%s removed %s reviewer(s) for %s: %s.' => array(
404 array(
405 '%s entfernte einen reviewer von %3$s: %4$s.',
406 '%s entfernte reviewers von %3$s: %4$s.',
407 ),
408 ),
409
410 '%d other(s)' => array(
411 '1 anderer',
412 '%d andere',
413 ),
414
415 '%s edited subscriber(s), added %d: %s; removed %d: %s.' =>
416 '%s bearbeitete Abonnenten, hinzugefügt: %3$s; entfernt: %5$s.',
417
418 '%s added %d subscriber(s): %s.' => array(
419 array(
420 '%s fügte einen Abonnenten hinzu: %3$s.',
421 '%s fügte Abonnenten hinzu: %3$s.',
422 ),
423 ),
424
425 '%s removed %d subscriber(s): %s.' => array(
426 array(
427 '%s entfernte einen Abonnenten: %3$s.',
428 '%s entfernte Abonnenten: %3$s.',
429 ),
430 ),
431
432 '%s edited watcher(s), added %s: %s; removed %d: %s.' =>
433 '%s bearbeitete Beobachter, hinzugefügt: %3$s; entfernt: %5$s.',
434
435 '%s added %s watcher(s): %s.' => array(
436 array(
437 '%s fügte einen Beobachter hinzu: %3$s.',
438 '%s fügte Beobachter hinzu: %3$s.',
439 ),
440 ),
441
442 '%s removed %s watcher(s): %s.' => array(
443 array(
444 '%s entfernte einen Beobachter: %3$s.',
445 '%s entfernte Beobachter: %3$s.',
446 ),
447 ),
448
449 '%s edited participant(s), added %d: %s; removed %d: %s.' =>
450 '%s bearbeitete Teilnehmer, hinzugefügt: %3$s; entfernt: %5$s.',
451
452 '%s added %d participant(s): %s.' => array(
453 array(
454 '%s fügte einen Teilnehmer hinzu: %3$s.',
455 '%s fügte Teilnehmer hinzu: %3$s.',
456 ),
457 ),
458
459 '%s removed %d participant(s): %s.' => array(
460 array(
461 '%s entfernte einen Teilnehmer: %3$s.',
462 '%s entfernte Teilnehmer: %3$s.',
463 ),
464 ),
465
466 '%s edited image(s), added %d: %s; removed %d: %s.' =>
467 '%s bearbeitete Bilder, hizugefügt: %3$s; entfernt: %5$s',
468
469 '%s added %d image(s): %s.' => array(
470 array(
471 '%s fügte ein Bild hinzu: %3$s.',
472 '%s fügte Bilder hinzu: %3$s.',
473 ),
474 ),
475
476 '%s removed %d image(s): %s.' => array(
477 array(
478 '%s entfernte ein Bild: %3$s.',
479 '%s entfernte Bilder: %3$s.',
480 ),
481 ),
482
483 '%s Line(s)' => array(
484 '%s Zeile',
485 '%s Zeilen',
486 ),
487
488 'Indexing %d object(s) of type %s.' => array(
489 'Indexing %d object of type %s.',
490 'Indexing %d object of type %s.',
491 ),
492
493 'Run these %d command(s):' => array(
494 'Run this command:',
495 'Run these commands:',
496 ),
497
498 'Install these %d PHP extension(s):' => array(
499 'Install this PHP extension:',
500 'Install these PHP extensions:',
501 ),
502
503 'The current Phabricator configuration has these %d value(s):' => array(
504 'The current Phabricator configuration has this value:',
505 'The current Phabricator configuration has these values:',
506 ),
507
508 'The current MySQL configuration has these %d value(s):' => array(
509 'The current MySQL configuration has this value:',
510 'The current MySQL configuration has these values:',
511 ),
512
513 'You can update these %d value(s) here:' => array(
514 'You can update this value here:',
515 'You can update these values here:',
516 ),
517
518 'The current PHP configuration has these %d value(s):' => array(
519 'The current PHP configuration has this value:',
520 'The current PHP configuration has these values:',
521 ),
522
523 'To update these %d value(s), edit your PHP configuration file.' => array(
524 'To update this %d value, edit your PHP configuration Datei.',
525 'To update these %d values, edit your PHP configuration Datei.',
526 ),
527
528 'To update these %d value(s), edit your PHP configuration Datei, located '.
529 'here:' => array(
530 'To update this value, edit your PHP configuration File, located '.
531 'here:',
532 'To update these values, edit your PHP configuration File, located '.
533 'here:',
534 ),
535
536 'PHP also loaded these %s configuration file(s):' => array(
537 'PHP also loaded this configuration File:',
538 'PHP also loaded these configuration Files:',
539 ),
540
541 'You have %d unresolved setup issue(s)...' => array(
542 'You have an unresolved setup issue...',
543 'You have %d unresolved setup issues...',
544 ),
545
546 '%s added %d inline comment(s).' => array(
547 array(
548 '%s fügte einen Zeilen-Kommentar hinzu.',
549 '%s fügte Zeilen-Kommentare hinzu.',
550 ),
551 ),
552
553 '%d comment(s)' => array('%d Kommentar', '%d Kommentare'),
554 '%d rejection(s)' => array('%d Ablehnung', '%d Ablehnungen'),
555 '%d update(s)' => array('%d update', '%d updates'),
556
557 'This configuration value is defined in these %d '.
558 'configuration source(s): %s.' => array(
559 'This configuration value is defined in this '.
560 'configuration source: %2$s.',
561 'This configuration value is defined in these %d '.
562 'configuration sources: %s.',
563 ),
564
565 '%d Open Pull Request(s)' => array(
566 '%d Open Pull Request',
567 '%d Open Pull Requests',
568 ),
569
570 'Stale (%s day(s))' => array(
571 'Abgestanden (%s Tag)',
572 'Abgestanden (%s Tage)',
573 ),
574
575 'Old (%s day(s))' => array(
576 'Alt (%s Tag)',
577 'Alt (%s Tage)',
578 ),
579
580 '%s Commit(s)' => array(
581 '%s Commit',
582 '%s Commits',
583 ),
584
585 '%s attached %d file(s): %s.' => array(
586 array(
587 '%s hängte eine Datei an: %3$s.',
588 '%s hängte Dateien an: %3$s.',
589 ),
590 ),
591
592 '%s detached %d file(s): %s.' => array(
593 array(
594 '%s entfernte eine Datei: %3$s.',
595 '%s entfernte Dateien: %3$s.',
596 ),
597 ),
598
599 '%s changed file(s), attached %d: %s; detached %d: %s.' =>
600 '%s änderte Dateien, angehängt: %3$s; entfernt: %5$s.',
601
602
603 '%s added %s dependencie(s): %s.' => array(
604 array(
605 '%s fügte eine Abhängigkeit hinzu: %3$s.',
606 '%s fügte Abhängigkeiten hinzu: %3$s.',
607 ),
608 ),
609
610 '%s added %s dependencie(s) for %s: %s.' => array(
611 array(
612 '%s fügte eine Abhängigkeit zu %3$s hinzu: %4$s.',
613 '%s fügte Abhängigkeiten zu %3$s hinzu: %4$s.',
614 ),
615 ),
616
617 '%s removed %s dependencie(s): %s.' => array(
618 array(
619 '%s entfernte eine Abhängigkeit: %3$s.',
620 '%s entfernte Abhängigkeiten: %3$s.',
621 ),
622 ),
623
624 '%s removed %s dependencie(s) for %s: %s.' => array(
625 array(
626 '%s entfernte eine Abhängigkeit von %3$s: %4$s.',
627 '%s entfernte Abhängigkeiten von %3$s: %4$s.',
628 ),
629 ),
630
631 '%s edited dependencie(s), added %s: %s; removed %s: %s.' => array(
632 '%s bearbeitete Abhängigkeiten, hizugefügt: %3$s; entfernt: %5$s',
633 ),
634
635 '%s edited dependencie(s) for %s, added %s: %s; removed %s: %s.' => array(
636 '%s bearbeitete Abhängigkeiten von %s, hizugefügt: %3$s; entfernt: %5$s',
637 ),
638
639 '%s added %s dependent revision(s): %s.' => array(
640 array(
641 '%s fügte eine abhängige revision hinzu: %3$s.',
642 '%s fügte abhängige revisionen hinzu: %3$s.',
643 ),
644 ),
645
646 '%s added %s dependent revision(s) for %s: %s.' => array(
647 array(
648 '%s fügte eine abhängige revision zu %3$s hinzu: %4$s.',
649 '%s fügte abhängige revisionen zu %3$s hinzu: %4$s.',
650 ),
651 ),
652
653 '%s removed %s dependent revision(s): %s.' => array(
654 array(
655 '%s entfernte eine abhängige revision: %3$s.',
656 '%s entfernte abhängige revisionen: %3$s.',
657 ),
658 ),
659
660 '%s removed %s dependent revision(s) for %s: %s.' => array(
661 array(
662 '%s entfernte eine abhängige revision von %3$s: %4$s.',
663 '%s entfernte abhängige revisionen von %3$s: %4$s.',
664 ),
665 ),
666
667 '%s added %s commit(s): %s.' => array(
668 array(
669 '%s fügte ein commit hinzu: %3$s.',
670 '%s fügte commits hinzu: %3$s.',
671 ),
672 ),
673
674 '%s removed %s commit(s): %s.' => array(
675 array(
676 '%s entfernte ein commit: %3$s.',
677 '%s entfernte commits: %3$s.',
678 ),
679 ),
680
681 '%s edited commit(s), added %s: %s; removed %s: %s.' =>
682 '%s bearbeitete commits, hizugefügt: %3$s; entfernt: %5$s',
683
684 '%s added %s reverted commit(s): %s.' => array(
685 array(
686 '%s fügte ein reverted commit hinzu: %3$s.',
687 '%s fügte reverted commits hinzu: %3$s.',
688 ),
689 ),
690
691 '%s removed %s reverted commit(s): %s.' => array(
692 array(
693 '%s entfernte ein reverted commit: %3$s.',
694 '%s entfernte reverted commits: %3$s.',
695 ),
696 ),
697
698 '%s edited reverted commit(s), added %s: %s; removed %s: %s.' =>
699 '%s bearbeitete reverted commits, hinzugefügt %3$s; entfernt %5$s.',
700
701 '%s added %s reverted commit(s) for %s: %s.' => array(
702 array(
703 '%s fügte ein reverted commit für %3$s hinzu: %4$s.',
704 '%s fügte reverted commits für %3$s hinzu: %4$s.',
705 ),
706 ),
707
708 '%s removed %s reverted commit(s) for %s: %s.' => array(
709 array(
710 '%s entfernte ein reverted commit for %3$s: %4$s.',
711 '%s entfernte reverted commits for %3$s: %4$s.',
712 ),
713 ),
714
715 '%s edited reverted commit(s) for %s, added %s: %s; removed %s: %s.' =>
716 '%s bearbeitete reverted commits for %2$s, hinzugefügt %4$s; entfernt %6$s.',
717
718 '%s added %s reverting commit(s): %s.' => array(
719 array(
720 '%s fügte ein reverting commit hinzu: %3$s.',
721 '%s fügte reverting commits hinzu: %3$s.',
722 ),
723 ),
724
725 '%s removed %s reverting commit(s): %s.' => array(
726 array(
727 '%s entfernte ein reverting commit: %3$s.',
728 '%s entfernte reverting commits: %3$s.',
729 ),
730 ),
731
732 '%s edited reverting commit(s), added %s: %s; removed %s: %s.' =>
733 '%s bearbeitete reverting commits, hinzugefügt %3$s; entfernt %5$s.',
734
735 '%s added %s reverting commit(s) for %s: %s.' => array(
736 array(
737 '%s fügte ein reverting commit für %3$s hinzu: %4$s.',
738 '%s fügte reverting commitsi für %3$s hinzu: %4$s.',
739 ),
740 ),
741
742 '%s removed %s reverting commit(s) for %s: %s.' => array(
743 array(
744 '%s entfernte ein reverting commit for %3$s: %4$s.',
745 '%s entfernte reverting commits for %3$s: %4$s.',
746 ),
747 ),
748
749 '%s edited reverting commit(s) for %s, added %s: %s; removed %s: %s.' =>
750 '%s bearbeitete reverting commits for %s, hinzugefügt %4$s; entfernt %6$s.',
751
752 '%s changed project member(s), added %d: %s; removed %d: %s.' =>
753 '%s änderte Projekt Mitglieder, hinzugefügt %3$s; entfernt %5$s.',
754
755 '%s added %d project member(s): %s.' => array(
756 array(
757 '%s fügte ein Mitglied hinzu: %3$s.',
758 '%s fügte Mitglieder hinzu: %3$s.',
759 ),
760 ),
761
762 '%s removed %d project member(s): %s.' => array(
763 array(
764 '%s entfernte ein Mitglied: %3$s.',
765 '%s entfernte Mitglieder: %3$s.',
766 ),
767 ),
768
769 '%d project hashtag(s) are already used: %s.' => array(
770 'Projekt Hashtag %2$s wird bereits benutzt.',
771 '%d Projekt Hashtags werden bereits benutzt: %2$s.',
772 ),
773
774 '%s changed project hashtag(s), added %d: %s; removed %d: %s.' =>
775 '%s änderte die Projekt Hashtags, hinzugefügt %3$s; entfernt %5$s.',
776
777 '%s added %d project hashtag(s): %s.' => array(
778 array(
779 '%s fügte einen Hashtag hinzu: %3$s.',
780 '%s fügte Hashtags hinzu: %3$s.',
781 ),
782 ),
783
784 '%s removed %d project hashtag(s): %s.' => array(
785 array(
786 '%s entfernte einen Hashtag: %3$s.',
787 '%s entfernte Hashtags: %3$s.',
788 ),
789 ),
790
791 '%s changed %s hashtag(s), added %d: %s; removed %d: %s.' =>
792 '%s änderte hashtags von %s, hinzugefügt %4$s; entfernt %6$s.',
793
794 '%s added %d %s hashtag(s): %s.' => array(
795 array(
796 '%s fügte einen hashtag zu %3$s hinzu: %4$s.',
797 '%s fügte hashtags zu %3$s hinzu: %4$s.',
798 ),
799 ),
800
801 '%s removed %d %s hashtag(s): %s.' => array(
802 array(
803 '%s entfernte ein hashtag von %3$s: %4$s.',
804 '%s entfernte hashtags von %3$s: %4$s.',
805 ),
806 ),
807
808 '%d User(s) Need Approval' => array(
809 '%d User Needs Approval',
810 '%d Users Need Approval',
811 ),
812
813 '%s older changes(s) are hidden.' => array(
814 '%d ältere Änderung ist ausgeblendet.',
815 '%d ältere Änderungen sind ausgeblendet.',
816 ),
817
818 '%s, %s line(s)' => array(
819 '%s, %s Zeile',
820 '%s, %s Zeilen',
821 ),
822
823 '%s pushed %d commit(s) to %s.' => array(
824 array(
825 '%s pushed ein commit to %3$s.',
826 '%s pushed %d commits to %s.',
827 ),
828 ),
829
830 '%s commit(s)' => array(
831 'ein commit',
832 '%s commits',
833 ),
834
835 '%s removed %s JIRA issue(s): %s.' => array(
836 array(
837 '%s entfernte ein JIRA issue: %3$s.',
838 '%s entfernte JIRA issues: %3$s.',
839 ),
840 ),
841
842 '%s added %s JIRA issue(s): %s.' => array(
843 array(
844 '%s fügte ein JIRA issue hinzu: %3$s.',
845 '%s fügte JIRA issues hinzu: %3$s.',
846 ),
847 ),
848
849 '%s added %s required legal document(s): %s.' => array(
850 array(
851 '%s fügte ein erforderliches legal Document hinzu: %3$s.',
852 '%s fügte erforderliche legal documents hinzu: %3$s.',
853 ),
854 ),
855
856 '%s updated JIRA issue(s): added %s %s; removed %d %s.' =>
857 '%s updated JIRA issues: hinzugefügt %3$s; entfernt %5$s.',
858
859 '%s edited %s task(s), added %s: %s; removed %s: %s.' =>
860 '%s bearbeitete Aufgaben, hinzugefügt %4$s; entfernt %6$s.',
861
862 '%s added %s task(s) to %s: %s.' => array(
863 array(
864 '%s fügte eine Aufgabe zu %3$s hinzu: %4$s.',
865 '%s fügte Aufgaben zu %3$s hinzu: %4$s.',
866 ),
867 ),
868
869 '%s removed %s task(s) from %s: %s.' => array(
870 array(
871 '%s entfernte eine Aufgabe from %3$s: %4$s.',
872 '%s entfernte Aufgaben from %3$s: %4$s.',
873 ),
874 ),
875
876 '%s edited %s task(s) for %s, added %s: %s; removed %s: %s.' =>
877 '%s bearbeitete Aufgaben für %3$s, hinzugefügt: %5$s; entfernt %7$s.',
878
879 '%s edited %s commit(s), added %s: %s; removed %s: %s.' =>
880 '%s bearbeitete commits, hinzugefügt %4$s; entfernt %6$s.',
881
882 '%s added %s commit(s) to %s: %s.' => array(
883 array(
884 '%s fügte ein commit zu %3$s hinzu: %4$s.',
885 '%s fügte commits zu %3$s hinzu: %4$s.',
886 ),
887 ),
888
889 '%s removed %s commit(s) from %s: %s.' => array(
890 array(
891 '%s entfernte ein commit from %3$s: %4$s.',
892 '%s entfernte commits from %3$s: %4$s.',
893 ),
894 ),
895
896 '%s edited %s commit(s) for %s, added %s: %s; removed %s: %s.' =>
897 '%s bearbeitete commits for %3$s, hinzugefügt: %5$s; entfernt %7$s.',
898
899 '%s added %s revision(s): %s.' => array(
900 array(
901 '%s fügte eine Revision hinzu: %3$s.',
902 '%s fügte Revisionen hinzu: %3$s.',
903 ),
904 ),
905
906 '%s removed %s revision(s): %s.' => array(
907 array(
908 '%s entfernte eine Revision: %3$s.',
909 '%s entfernte Revisionen: %3$s.',
910 ),
911 ),
912
913 '%s edited %s revision(s), added %s: %s; removed %s: %s.' =>
914 '%s bearbeitete Revisionen, hinzugefügt %4$s; entfernt %6$s.',
915
916 '%s added %s revision(s) to %s: %s.' => array(
917 array(
918 '%s fügte eine Revision zu %3$s hinzu: %4$s.',
919 '%s fügte Revisionen zu %3$s hinzu: %4$s.',
920 ),
921 ),
922
923 '%s removed %s revision(s) from %s: %s.' => array(
924 array(
925 '%s entfernte eine Revision von %3$s: %4$s.',
926 '%s entfernte Revisionenen von %3$s: %4$s.',
927 ),
928 ),
929
930 '%s edited %s revision(s) for %s, added %s: %s; removed %s: %s.' =>
931 '%s bearbeitete Revisionen for %3$s, hinzugefügt: %5$s; entfernt %7$s.',
932
933 '%s edited %s project(s), added %s: %s; removed %s: %s.' =>
934 '%s bearbeitete Projekte, hinzugefügt %4$s; entfernt %6$s.',
935
936 '%s added %s project(s) to %s: %s.' => array(
937 array(
938 '%s fügte ein Projekt zu %3$s hinzu: %4$s.',
939 '%s fügte Projekte zu %3$s hinzu: %4$s.',
940 ),
941 ),
942
943 '%s removed %s project(s) from %s: %s.' => array(
944 array(
945 '%s entfernte ein Projekt von %3$s: %4$s.',
946 '%s entfernte Projekte von %3$s: %4$s.',
947 ),
948 ),
949
950 '%s edited %s project(s) for %s, added %s: %s; removed %s: %s.' =>
951 '%s bearbeitete Projekte for %3$s, hinzugefügt: %5$s; entfernt %7$s.',
952
953 '%s added %s panel(s): %s.' => array(
954 array(
955 '%s fügte ein panel hinzu: %3$s.',
956 '%s fügte panels hinzu: %3$s.',
957 ),
958 ),
959
960 '%s removed %s panel(s): %s.' => array(
961 array(
962 '%s entfernte ein panel: %3$s.',
963 '%s entfernte panels: %3$s.',
964 ),
965 ),
966
967 '%s edited %s panel(s), added %s: %s; removed %s: %s.' =>
968 '%s bearbeitete panels, hinzugefügt %4$s; entfernt %6$s.',
969
970 '%s added %s dashboard(s): %s.' => array(
971 array(
972 '%s fügte ein dashboard hinzu: %3$s.',
973 '%s fügte dashboards hinzu: %3$s.',
974 ),
975 ),
976
977 '%s removed %s dashboard(s): %s.' => array(
978 array(
979 '%s entfernte ein dashboard: %3$s.',
980 '%s entfernte dashboards: %3$s.',
981 ),
982 ),
983
984 '%s edited %s dashboard(s), added %s: %s; removed %s: %s.' =>
985 '%s bearbeitete dashboards, hinzugefügt %4$s; entfernt %6$s.',
986
987 '%s added %s edge(s): %s.' => array(
988 array(
989 '%s fügte an edge hinzu: %3$s.',
990 '%s fügte edges hinzu: %3$s.',
991 ),
992 ),
993
994 '%s added %s edge(s) to %s: %s.' => array(
995 array(
996 '%s fügte an edge zu %3$s hinzu: %4$s.',
997 '%s fügte edges zu %3$s hinzu: %4$s.',
998 ),
999 ),
1000
1001 '%s removed %s edge(s): %s.' => array(
1002 array(
1003 '%s entfernte an edge: %3$s.',
1004 '%s entfernte edges: %3$s.',
1005 ),
1006 ),
1007
1008 '%s removed %s edge(s) from %s: %s.' => array(
1009 array(
1010 '%s entfernte an edge von %3$s: %4$s.',
1011 '%s entfernte edges von %3$s: %4$s.',
1012 ),
1013 ),
1014
1015 '%s edited edge(s), added %s: %s; removed %s: %s.' =>
1016 '%s bearbeitete edges, hinzugefügt: %3$s; entfernt: %5$s.',
1017
1018 '%s edited %s edge(s) for %s, added %s: %s; removed %s: %s.' =>
1019 '%s bearbeitete edges for %3$s, hinzugefügt: %5$s; entfernt %7$s.',
1020
1021 '%s added %s member(s) for %s: %s.' => array(
1022 array(
1023 '%s fügte ein Mitglied zu %3$s hinzu: %4$s.',
1024 '%s fügte Mitglieder zu %3$s hinzu: %4$s.',
1025 ),
1026 ),
1027
1028 '%s removed %s member(s) for %s: %s.' => array(
1029 array(
1030 '%s entfernte ein Mitglied von %3$s: %4$s.',
1031 '%s entfernte Mitglieder von %3$s: %4$s.',
1032 ),
1033 ),
1034
1035 '%s edited %s member(s) for %s, added %s: %s; removed %s: %s.' =>
1036 '%s bearbetete Mitglieder von %3$s, hizugefügt: %5$s; entfernt %7$s.',
1037
1038 '%d related link(s):' => array(
1039 'Related link:',
1040 'Related links:',
1041 ),
1042
1043 'You have %d unpaid invoice(s).' => array(#Bookmark
1044 'You have an unpaid invoice.',
1045 'You have unpaid invoices.',
1046 ),
1047
1048 'The configurations differ in the following %s way(s):' => array(
1049 'The configurations differ:',
1050 'The configurations differ in these ways:',
1051 ),
1052
1053 'Phabricator is configured with an email domain whitelist (in %s), so '.
1054 'only users with a verified email address at one of these %s '.
1055 'allowed domain(s) will be able to register an account: %s' => array(
1056 array(
1057 'Phabricator is configured with an email domain whitelist (in %s), '.
1058 'so only users with a verified email address at %3$s will be '.
1059 'allowed to register an account.',
1060 'Phabricator is configured with an email domain whitelist (in %s), '.
1061 'so only users with a verified email address at one of these '.
1062 'allowed domains will be able to register an account: %3$s',
1063 ),
1064 ),
1065
1066 'Show First %d Line(s)' => array(
1067 'Zeige erste Zeile',
1068 'Zeige die ersten %d Zeilen',
1069 ),
1070
1071 "\xE2\x96\xB2 Show %d Line(s)" => array(
1072 "\xE2\x96\xB2 Zeige Zeile",
1073 "\xE2\x96\xB2 Zeige %d Zeilen",
1074 ),
1075
1076 'Show All %d Line(s)' => array(
1077 'Zeige Zeile',
1078 'Zeige alle %d Zeilen',
1079 ),
1080
1081 "\xE2\x96\xBC Show %d Line(s)" => array(
1082 "\xE2\x96\xBC Zeige Zeile",
1083 "\xE2\x96\xBC Zeige %d Zeilen",
1084 ),
1085
1086 'Show Last %d Line(s)' => array(
1087 'Zeige letzte Zeile',
1088 'Zeige die letzten %d Zeilen',
1089 ),
1090
1091 '%s marked %s Zeilen-Kommentar(s) als erledigt and %s Zeilen-Kommentar(s) as '.
1092 'not done.' => array(
1093 array(
1094 array(
1095 '%s markierte einen Zeilen-Kommentar als erledigt und einen Zeilen-Kommentar '.
1096 'als nicht erledigt.',
1097 '%s markierte einen Zeilen-Kommentar als erledigt und %3$s Zeilen-Kommentare '.
1098 'als nicht erledigt.',
1099 ),
1100 array(
1101 '%s markierte %s Zeilen-Kommentare als erledigt und einen Zeilen-Kommentar '.
1102 'als nicht erledigt.',
1103 '%s markierte %s Zeilen-Kommentare als erledigt und %s Zeilen-Kommentare '.
1104 'als nicht erledigt.',
1105 ),
1106 ),
1107 ),
1108
1109 '%s marked %s inline comment(s) as done.' => array(
1110 array(
1111 '%s marked einen Zeilen-Kommentar als erledigt.',
1112 '%s marked %s Zeilen-Kommentare als erledigt.',
1113 ),
1114 ),
1115
1116 '%s marked %s inline comment(s) as not done.' => array(
1117 array(
1118 '%s markierte einen Zeilen-Kommentar als nicht erledigt.',
1119 '%s markierte %s Zeilen-Kommentare als nicht erledigt.',
1120 ),
1121 ),
1122
1123 'These %s object(s) will be destroyed forever:' => array(
1124 'Dieses Objekt wird für immer zerstört werden:',
1125 'Diese Objekte werden für immer zerstört:',
1126 ),
1127
1128 'Are you absolutely certain you want to destroy these %s '.
1129 'object(s)?' => array(
1130 'Are you absolutely certain you want to destroy this object?',
1131 'Are you absolutely certain you want to destroy these objects?',
1132 ),
1133
1134 '%s added %s owner(s): %s.' => array(
1135 array(
1136 '%s added an owner: %3$s.',
1137 '%s added owners: %3$s.',
1138 ),
1139 ),
1140
1141 '%s removed %s owner(s): %s.' => array(
1142 array(
1143 '%s removed an owner: %3$s.',
1144 '%s removed owners: %3$s.',
1145 ),
1146 ),
1147
1148 '%s changed %s package owner(s), added %s: %s; removed %s: %s.' => array(
1149 '%s changed package owners, added: %4$s; removed: %6$s.',
1150 ),
1151
1152 'Found %s book(s).' => array(
1153 'Found %s book.',
1154 'Found %s books.',
1155 ),
1156 'Found %s file(s) in project.' => array(
1157 'Found %s file in project.',
1158 'Found %s files in project.',
1159 ),
1160 'Found %s unatomized, uncached file(s).' => array(
1161 'Found %s unatomized, uncached file.',
1162 'Found %s unatomized, uncached files.',
1163 ),
1164 'Found %s file(s) to atomize.' => array(
1165 'Found %s file to atomize.',
1166 'Found %s files to atomize.',
1167 ),
1168 'Atomizing %s file(s).' => array(
1169 'Atomizing %s file.',
1170 'Atomizing %s files.',
1171 ),
1172 'Creating %s document(s).' => array(
1173 'Creating %s document.',
1174 'Creating %s documents.',
1175 ),
1176 'Deleting %s document(s).' => array(
1177 'Deleting %s document.',
1178 'Deleting %s documents.',
1179 ),
1180 'Found %s obsolete atom(s) in graph.' => array(
1181 'Found %s obsolete atom in graph.',
1182 'Found %s obsolete atoms in graph.',
1183 ),
1184 'Found %s new atom(s) in graph.' => array(
1185 'Found %s new atom in graph.',
1186 'Found %s new atoms in graph.',
1187 ),
1188 'This call takes %s parameter(s), but only %s are documented.' => array(
1189 array(
1190 'This call takes %s parameter, but only %s is documented.',
1191 'This call takes %s parameter, but only %s are documented.',
1192 ),
1193 array(
1194 'This call takes %s parameters, but only %s is documented.',
1195 'This call takes %s parameters, but only %s are documented.',
1196 ),
1197 ),
1198
1199 '%s Passed Test(s)' => '%s Passed',
1200 '%s Failed Test(s)' => '%s Failed',
1201 '%s Skipped Test(s)' => '%s Skipped',
1202 '%s Broken Test(s)' => '%s Broken',
1203 '%s Unsound Test(s)' => '%s Unsound',
1204 '%s Other Test(s)' => '%s Other',
1205
1206 '%s Bulk Task(s)' => array(
1207 '%s Task',
1208 '%s Tasks',
1209 ),
1210
1211 '%s added %s badge(s) for %s: %s.' => array(
1212 array(
1213 '%s added a badge for %s: %3$s.',
1214 '%s added badges for %s: %3$s.',
1215 ),
1216 ),
1217 '%s added %s badge(s): %s.' => array(
1218 array(
1219 '%s added a badge: %3$s.',
1220 '%s added badges: %3$s.',
1221 ),
1222 ),
1223 '%s awarded %s recipient(s) for %s: %s.' => array(
1224 array(
1225 '%s awarded %3$s to %4$s.',
1226 '%s awarded %3$s to multiple recipients: %4$s.',
1227 ),
1228 ),
1229 '%s awarded %s recipients(s): %s.' => array(
1230 array(
1231 '%s awarded a recipient: %3$s.',
1232 '%s awarded multiple recipients: %3$s.',
1233 ),
1234 ),
1235 '%s edited badge(s) for %s, added %s: %s; revoked %s: %s.' => array(
1236 array(
1237 '%s edited badges for %s, added %s: %s; revoked %s: %s.',
1238 '%s edited badges for %s, added %s: %s; revoked %s: %s.',
1239 ),
1240 ),
1241 '%s edited badge(s), added %s: %s; revoked %s: %s.' => array(
1242 array(
1243 '%s edited badges, added %s: %s; revoked %s: %s.',
1244 '%s edited badges, added %s: %s; revoked %s: %s.',
1245 ),
1246 ),
1247 '%s edited recipient(s) for %s, awarded %s: %s; revoked %s: %s.' => array(
1248 array(
1249 '%s edited recipients for %s, awarded %s: %s; revoked %s: %s.',
1250 '%s edited recipients for %s, awarded %s: %s; revoked %s: %s.',
1251 ),
1252 ),
1253 '%s edited recipient(s), awarded %s: %s; revoked %s: %s.' => array(
1254 array(
1255 '%s edited recipients, awarded %s: %s; revoked %s: %s.',
1256 '%s edited recipients, awarded %s: %s; revoked %s: %s.',
1257 ),
1258 ),
1259 '%s revoked %s badge(s) for %s: %s.' => array(
1260 array(
1261 '%s revoked a badge for %3$s: %4$s.',
1262 '%s revoked multiple badges for %3$s: %4$s.',
1263 ),
1264 ),
1265 '%s revoked %s badge(s): %s.' => array(
1266 array(
1267 '%s revoked a badge: %3$s.',
1268 '%s revoked multiple badges: %3$s.',
1269 ),
1270 ),
1271 '%s revoked %s recipient(s) for %s: %s.' => array(
1272 array(
1273 '%s revoked %3$s from %4$s.',
1274 '%s revoked multiple recipients for %3$s: %4$s.',
1275 ),
1276 ),
1277
1278 '%s revoked %s recipients(s): %s.' => array(
1279 array(
1280 '%s revoked a recipient: %3$s.',
1281 '%s revoked multiple recipients: %3$s.',
1282 ),
1283 ),
1284
1285 '%s automatically subscribed target(s) were not affected: %s.' => array(
1286 'An automatically subscribed target was not affected: %2$s.',
1287 'Automatically subscribed targets were not affected: %2$s.',
1288 ),
1289
1290 'Declined to resubscribe %s target(s) because they previously '.
1291 'unsubscribed: %s.' => array(
1292 'Delined to resubscribe a target because they previously '.
1293 'unsubscribed: %2$s.',
1294 'Declined to resubscribe targets because they previously '.
1295 'unsubscribed: %2$s.',
1296 ),
1297
1298 '%s target(s) are not subscribed: %s.' => array(
1299 'A target is not subscribed: %2$s.',
1300 'Targets are not subscribed: %2$s.',
1301 ),
1302
1303 '%s target(s) are already subscribed: %s.' => array(
1304 'A target is already subscribed: %2$s.',
1305 'Targets are already subscribed: %2$s.',
1306 ),
1307
1308 'Added %s subscriber(s): %s.' => array(
1309 'Added a subscriber: %2$s.',
1310 'Added subscribers: %2$s.',
1311 ),
1312
1313 'Removed %s subscriber(s): %s.' => array(
1314 'Removed a subscriber: %2$s.',
1315 'Removed subscribers: %2$s.',
1316 ),
1317
1318 'Queued email to be delivered to %s target(s): %s.' => array(
1319 'Queued email to be delivered to target: %2$s.',
1320 'Queued email to be delivered to targets: %2$s.',
1321 ),
1322
1323 'Queued email to be delivered to %s target(s), ignoring their '.
1324 'notification preferences: %s.' => array(
1325 'Queued email to be delivered to target, ignoring notification '.
1326 'preferences: %2$s.',
1327 'Queued email to be delivered to targets, ignoring notification '.
1328 'preferences: %2$s.',
1329 ),
1330
1331 '%s project(s) are not associated: %s.' => array(
1332 'A project is not associated: %2$s.',
1333 'Projects are not associated: %2$s.',
1334 ),
1335
1336 '%s project(s) are already associated: %s.' => array(
1337 'A project is already associated: %2$s.',
1338 'Projects are already associated: %2$s.',
1339 ),
1340
1341 'Added %s project(s): %s.' => array(
1342 'Added a project: %2$s.',
1343 'Added projects: %2$s.',
1344 ),
1345
1346 'Removed %s project(s): %s.' => array(
1347 'Removed a project: %2$s.',
1348 'Removed projects: %2$s.',
1349 ),
1350
1351 'Added %s reviewer(s): %s.' => array(
1352 'Added a reviewer: %2$s.',
1353 'Added reviewers: %2$s.',
1354 ),
1355
1356 'Added %s blocking reviewer(s): %s.' => array(
1357 'Added a blocking reviewer: %2$s.',
1358 'Added blocking reviewers: %2$s.',
1359 ),
1360
1361 'Required %s signature(s): %s.' => array(
1362 'Required a signature: %2$s.',
1363 'Required signatures: %2$s.',
1364 ),
1365
1366 'Started %s build(s): %s.' => array(
1367 'Started a build: %2$s.',
1368 'Started builds: %2$s.',
1369 ),
1370
1371 'Added %s auditor(s): %s.' => array(
1372 'Added an auditor: %2$s.',
1373 'Added auditors: %2$s.',
1374 ),
1375
1376 '%s target(s) do not have permission to see this object: %s.' => array(
1377 'A target does not have permission to see this object: %2$s.',
1378 'Targets do not have permission to see this object: %2$s.',
1379 ),
1380
1381 'This action has no effect on %s target(s): %s.' => array(
1382 'This action has no effect on a target: %2$s.',
1383 'This action has no effect on targets: %2$s.',
1384 ),
1385
1386 'Mail sent in the last %s day(s).' => array(
1387 'Mail sent in the last day.',
1388 'Mail sent in the last %s days.',
1389 ),
1390 #END OF OFFICIEL
1391
1392
1393 #Overall ' => '',
1394 'Create Custom Pages' => 'Erstelle Übersichtsseiten',
1395 'Explore More Applications' => 'Entdecke mehr Anwendungen',
1396 'Customize Menu...' => 'Menü anpassen ...',
1397 'Create' => 'Erstellen',
1398 'Create New...' => 'Neu erstellen...',
1399 'Update' => 'Aktualisieren',
1400 'Continue' => 'Fortfahren',
1401 'Send' => 'Senden',
1402 'Submit' => 'Senden',
1403 'Save' => 'Speichern',
1404 'Save Changes' => 'Änderungen speichern',
1405 'Changes saved.' => 'Änderungen gespeichert.',
1406 'Add Comment' => 'Kommentar hinzufügen',
1407 'Add Action...' => 'Aktion hinzufügen...',
1408 'Move on Workboard' => 'Auf Workboard bewegen',
1409 'Change Project Tags' => 'Projekt Tags ändern',
1410 'Change Subscribers' => 'Abonnenten ändern',
1411 'Take Action' => 'Aktiv werden',
1412 'Join' => 'Beitreten',
1413 'Cancel' => 'Abbrechen',
1414 'Close' => 'Schließen',
1415 'No data.' => 'Keine Daten.',
1416 'Partial' => 'Teilweise',
1417 'Partial Upload' => 'Teilweiser Upload',
1418 'View All' => 'Zeige Alle',
1419 'All' => 'Alle',
1420 'Title' => 'Titel',
1421 'Action' => 'Aktion',
1422 'Actions' => 'Aktionen',
1423 'View Raw' => 'Zeige Rohdaten',
1424 'PREVIEW' => 'VORSCHAU',
1425 'Preview' => 'Vorschau',
1426 'Help' => 'Hilfe',
1427 'Document Preview' => 'Dokument Vorschau',
1428 'Description Preview' => 'Beschreibungs Vorschau',
1429 'Configure Form' => 'Form erstellen',
1430 'Description' => 'Beschreibung',
1431 'Comments' => 'Kommentare',
1432 'Author' => 'Autor',
1433 'Subscribers' => 'Abonnenten',
1434 'Required' => 'Notwendig',
1435 'Visible To' => 'Sichtbar für',
1436 'Editable By' => 'Bearbeitbar von',
1437 'Policies' => 'Richtlinien',
1438 'Default' => 'Standard',
1439 'Prototype' => 'Prototyp',
1440 '(Show Details)' => '(Zeige Details)',
1441 'Change Details' => 'Änderungs Details',
1442 'Updated' => 'Aktualisiert',
1443 'Loading...' => 'Laden...',
1444 'None' => 'Niemand',
1445 'Recent Activity' => 'Neuste Aktivitäten',
1446 '%s mentioned this in %s.' => '%s erwähnte dies in %s.',
1447 '%s changed the visibility from "%s" to "%s".' =>
1448 '%s änderte die Sichtbarkeit von "%s" zu "%s".',
1449 '%s changed the edit policy from "%s" to "%s".' =>
1450 '%s änderte die Bearbeitungsrichtlinie von "%s" zu "%s".',
1451 #Search
1452 'Search' => 'Suchen',
1453 'Query' => 'Filter',
1454 'Edit Query...' => 'Filter bearbeiten...',
1455 'Edit Query' => 'Filter bearbeiten',
1456 'Edit Queries...' => 'Filter bearbeiten...',
1457 'Save Custom Query...' => 'Benutzerdeffinierten Filter speichern',
1458 'Showing results for query "%s".' => 'Zeige Ergebnisse für Filter "%s".',
1459 'Showing results for saved query "%s".' => 'Zeige Ergebnisse '.
1460 'für gespeicherten Filter "%s".',
1461 'Advanced Search' => 'Erweiterte Suche',
1462 'No search results.' => 'Nix gefunden.',
1463 'No results found for this query.' => 'Keine Ergebnisse mit diesem Filter.',
1464 'Hide Query' => 'Filter verstecken',
1465 'Execute Query' => 'Suche filtern',
1466 'Browse Users' => 'Benutzer durchsuchen',
1467 'Browse Subscribers' => 'Abonnenten durchsuchen',
1468 'Browse Projects' => 'Projekte durchsuchen',
1469 'Browse Document Types' => 'Dokument Typen durchsuchen',
1470 'Select' => 'Auswählen',
1471 'Search All Documents' => 'Alle Dokumente durchsuchen',
1472 'Search Current Application' => 'Aktuelle Anwendung durchsuchen',
1473 'Saved Queries' => 'Gespeicherte Filter',
1474 'Open Documents' => 'Offene Dokumente',
1475 'More Options' => 'Mehr Optionen',
1476 #Edit
1477 'Edit' => 'Bearbeiten',
1478 'Edit Comment' => 'Kommentar bearbeiten',
1479 'Remove Comment' => 'Kommentar entfernen',
1480 'Bold' => 'Fett',
1481 'bold text' => 'fetter Text',
1482 'Italics' => 'Kurisv',
1483 'italic text' => 'kursiver Text',
1484 'Monospaced' => 'Unproportional',
1485 'monospaced text' => 'unproportionaler Text',
1486 'Bulleted List' => 'Aufzählung',
1487 'List Item' => 'Listen Eintrag',
1488 'Numbered List' => 'Nummerierte Aufzählung',
1489 'Quote' => 'Zitat',
1490 'Quoted Text' => 'Zitierter Text',
1491 'Table' => 'Tabelle',
1492 'data' => 'Daten',
1493 'Upload File' => 'Datei hochladen',
1494 'To add files, drag and drop them into the comment text area.' => 'Um Dateien hochzuladen, benutze Drag and Drop und ziehe sie in das Textfeld.',
1495 'Fullscreen Mode' => 'Vollbild Modus',
1496 'Type a user, project, package, or mailing list name...' => 'Gib einen Benutzer, Projekt, Packet oder Mailing List Name ein...',
1497 #'' => '',
1498 #Icons
1499 'Icon' => 'Symbol',
1500 'Travel' => 'Reise',
1501 'Health / Appointment' => 'Gesundheit / Verabredung',
1502 'Sabatical / Leave' => 'Forschungsurlaub / Urlaub',
1503 'Working From Home' => 'Zuhause arbeiten',
1504 'Holiday' => 'Ferien',
1505 'Staycation' => 'Urlaub auf Balkonien',
1506 'Coffee Meeting' => 'Kaffee Runde',
1507 'Movie' => 'Film',
1508 'Meeting' => 'Sitzung',
1509 'Meal' => 'Mahlzeit',
1510 'Pet Activity' => 'Tier Aktivität',
1511 'Official Business' => 'Offizielle Geschäfte',
1512 'Field Trip' => 'Ausflug',
1513 'Conference' => 'Konferenz',
1514 'Briefcase' => 'Koffer',
1515 'Tag' => 'Etikett',
1516 'Folder' => 'Ordner',
1517 'Bug' => 'Käfer / Bug',
1518 'Garbage' => 'Mülleimer',
1519 'Goal' => 'Ziel',
1520 'Communication' => 'Kommunikation',
1521 'Policy' => 'Richtlinie',
1522 'An Umbrella' => 'Ein Schirm',
1523 'Umbrella' => 'Schirm',
1524 'Folder' => 'Ordner',
1525 'The Cloud' => 'Wolke',
1526 'Group' => 'Gruppe',
1527 'Company' => 'Firma',
1528 'Accounting' => 'Buchhaltung',
1529 'Experimental' => 'Experimentell',
1530 #'Like' => '',
1531 #'Dislike' => '',
1532 'Love' => 'Herz',
1533 'Heartbreak' => 'Gebrochenes Herz',
1534 'Orange Medal' => 'Orangene Medallie',
1535 'Grey Medal' => 'Graue Medallie',
1536 'Yellow Medal' => 'Gelbe Medallie',
1537 'Manufacturing Defect?' => 'Fabrikation Defekt?',
1538 'Haypence' => 'Centstück',
1539 'Piece of Eight' => 'Eurostück',
1540 'Doubloon' => 'Dublone',
1541 'Mountain of Wealth' => 'Berg von Reichtum',
1542 'Pterodactyl' => 'Pterodactylus',
1543 'Evil Spooky Haunted Tree' => 'Böser Gruseliger Spukbaum',
1544 #'Baby Tequila' => '',
1545 'The World Burns' => 'Die Welt Brennt!',
1546 'Colors' => 'Farben',
1547 'Color' => 'Farbe',
1548 'Blue' => 'Blau',
1549 'Red' => 'Rot',
1550 'Orange' => 'Orange',
1551 'Yellow' => 'Gelb',
1552 'Violet' => 'Violett',
1553 'Green' => 'Grün',
1554 'Grey' => 'Grau',
1555 'Checkered' => 'Kariert',
1556 'Award "%s" Token' => '"%s" Auszeichnung verleihen',
1557 #Apps
1558 'All Applications' => 'Alle Programme',
1559 'Can Use Application' => 'Kann Program benutzen',
1560 'Can Configure Application' => 'Kann Programm konfigurieren',
1561 #Differential
1562 'Review Code' => 'Code überprüfen',
1563 #Maniphest
1564// 'Open' =>'Offen',
1565// 'Resolved' => 'Gelöst',
1566// 'Wontfix' => 'Nicht behebbar', # dunno
1567// 'Invalid' => 'Ungültig',
1568 'Task Graph' => 'Aufgaben Grafik',
1569 'Edit Related Tasks...'=>'Editiere zugehörige Aufgaben...',
1570 'Edit Parent Tasks' => 'Editiere Hauptaufgabe',
1571 'Edit Subtasks' => 'Editiere Unteraufgabe',
1572 'Close As Duplicate' => 'Als Dublikat schließen',
1573 'Edit Related Objects...' => 'Editiere zugehörige Objekte...',
1574 'Edit Commits' => 'Bearbeite Commits',
1575 'Edit Mocks' => 'Bearbeite Mocks',
1576 'Edit Revisions' => 'Bearbeite Revisionen',
1577 'Tasks and Bugs' => 'Aufgaben und Fehler',
1578 'Maniphest Help' => 'Maniphest Hilfe',
1579 'Create Task' => 'Aufgabe erstellen',
1580 'Maniphest Task' => 'Maniphest Aufgabe',
1581 'Create New Task' => 'Neue Aufgabe erstellen',
1582 'Quick Create' => 'Schnell erstellen',
1583 'Upload Picture' => 'Bild hochladen',
1584 'Current Picture' => 'Derzeitiges Bild',
1585 'Use Picture' => 'Nutze Bild',
1586 'Edit Project Picture' => 'Editiere Projekt Bild',
1587 'Upload New Picture' => 'Neues Bild hochladen',
1588 'Choose Icon and Color...' => 'Icon und Farbe wählen...',
1589 'Type a project name...' => 'Gib einen Projektnamen ein...',
1590 'Type a username...' => 'Gib einen Benutzernamen ein...',
1591 'Type a user, project, or mailing list name...' => 'Gib einen Benutzer, '.
1592 'Projekt, oder Verteiler Namen ein...',
1593 'Queries' => 'Filter',
1594 'Query: %s' => 'Filter: %s',
1595 'Assigned' => 'Zugeteilt',
1596 'Assigned: %s' => 'Zugeteilt: %s',
1597 'Authored' => 'Erstellt',
1598 'Authored By' => 'Erstellt von',
1599 'Subscribed' => 'Abonniert',
1600 'Open Tasks' => 'Offene Aufgaben',
1601 'All Tasks' => 'Alle Aufgaben',
1602 'By User' => 'Nach Nutzer',
1603 'By Project' => 'Nach Projekt',
1604 "Compose Image" => "Bild komponieren",
1605 "Choose Background Color" => "Hintergrundfarbe wählen",
1606 "Choose Icon" => "Icon auswählen",
1607
1608 # Eine Aufgabe ist zugeteilt AN Jemanden nicht ZU ?!
1609 'Assigned To' => 'Zugeteilt an',
1610 'In All Projects' => 'In allen Projekten',
1611 'In Any Project' => 'In einem Projekt',
1612 'Not In Projects' => 'Nicht in Projekten',
1613 "In Users' Projects" => 'In Projekten von',
1614 'Authors' => 'Autoren',
1615 'Abonnenten' => 'Abonnenten',
1616 'Contains Words' => 'Enthält Wörter',
1617 'Priority' => 'Priorität',
1618 'Blocking' => 'Blockierend',
1619 'Blocked' => 'Blockiert',
1620 'Group By' => 'Gruppiert nach',
1621 'Order By' => 'Sortiert nach',
1622 'Task IDs' => 'Aufgaben IDs',
1623 'Created After' => 'Erstellt nach',
1624 'Created Before' => 'Erstellt vor',
1625 'Updated After' => 'Aktualisiert nach',
1626 'Updated Before' => 'Aktualisiert vor',
1627 'Page Size' => 'Seitengröße',
1628 'Shift-Click to Select Tasks' => 'Shift-Click um Aufgaben auszuwählen',
1629 'Select All' => 'Alles auswälen',
1630 'Clear Selection' => 'Alles abwählen',
1631 'Export to Excel' => 'Zu Excel exportieren',
1632 'Export Tasks to Excel' => 'Aufgaben als Excel-Tabelle exportieren',
1633 'Do you want to export the query results to Excel?' =>
1634 'Möchtest du die Suchergebnisse als Excel-Tabelle exportieren?',
1635 'Batch Edit Selected »' => 'Stapelverarbeitung der Auswahl',
1636 'Edit Task' => 'Aufgabe bearbeiten',
1637 'Save Task' => 'Änderungen speichern',
1638 'Merge Duplicates In' => 'Duplikat zusammenführen',
1639 'Create Subtask' => 'Unteraufgabe erstellen',
1640 'Edit Blocking Tasks' => 'Blockierende Aufgaben bearbeiten',
1641 #'Edit Differential Revisions' => '?',
1642 #'Edit Pholio Mocks' => '?',
1643 'Automatically Subscribed' => 'Automatisch Abonniert',
1644 'Unsubscribe' => 'Deabonnieren',
1645 'Subscribe' => 'Abonnieren',
1646 'Start Tracking Time' => 'Zeit Aufzeichnung starten',
1647 'What time did you start working?' => 'Wann hast du mit der Arbeit begonnen?',
1648 'Award Token' => 'Eine Auszeichnung verleihen',
1649 'Give Token' => 'Token vergeben',
1650 'New task created. Create another?' => 'Neue Aufgabe erstellt.'.
1651 ' Eine weitere erstellen?',
1652 'Similar Task' => 'Ähnliche Aufgabe','Empty Task' => 'Leere Aufgabe',
1653 'Older changes are hidden. ' => 'Ältere Änderungen sind ausgeblendet. ',
1654 'Show older changes.' => 'Zeige ältere Änderungen.',
1655 "Additional Hashtags" => "Zusätzliche Hastags",
1656 "Joinable By" => "Beitretbar von",
1657 "Project Members" => "Projekt Mitglieder",
1658 "Select Project" => "Projekt auswählen",
1659 "Members Of" => "Mitglied von",
1660 "Public (No Login Required)" => "Öffentlich (Kein Login)",
1661 "Object Policies" => "Objekt Richtlinien",
1662 "Members of Project..." => "Mitglieder von Projekt...",
1663 "Other Project..." => "Anderes Projekt...",
1664 "Choose Project Icon" => "Projekt Icon auswählen",
1665
1666 #'' => '',
1667 '%s created this task.' => '%s erstellte diese Aufgabe',
1668 '%s closed %s as "%s".' => '%s schließt %s als "%s".',
1669 '%s updated the image for %s from %s to %s.' => '%s ändert das Bild für %s von %s auf %s.',
1670 '%s lowered the priority of %s from "%s" to "%s".' => '%s senkt die Priorität für %s von "%s" auf "%s".',
1671 '%s reopened %s as "%s".' => '%s öffnet erneut %s als "%s".',
1672 '%s changed the status of %s from "%s" to "%s".' => '%s ändert den Status für %s von "%s" auf "%s".',
1673 'Weigh In' => 'Äußere dich...',
1674 '%s added a comment.' => '%s fügte einen Kommentar hinzu.',
1675 '%s closed this task as a duplicate.' => '%s schloss diese Aufgabe'.
1676 ' als ein Duplikat.',
1677 '%s closed this task as "%s".' => '%s schloss diese Aufgsbe als "%s".',
1678 '%s placed this task up for grabs.' => '%s gab die Aufgabe zum übernehmen frei.',
1679 '%s assigned this task to %s.' => '%s teilte diese Aufgabe %s zu.',
1680 '%s claimed this task.' => '%s übernahm diese Aufgabe.',
1681 '%s updated subscribers...' => '%s aktualisierte Abonnenten...',
1682 '%s triaged this task as "%s" priority.' => '%s setzte '.
1683 'die Priorität der Aufgabe auf "%s".',
1684 '%s removed %s as the assignee of this task.' => '%s '.
1685 'entfernte %s als den zugewiesenen Bearbeiter dieses Tasks.',
1686 '%s raised the priority of this task from "%s" to "%s".' => '%s '.
1687 'erhöhte die Priorität von "%s" auf "%s".',
1688 '%s reopened this task as "%s".' => '%s '.
1689 'öffnete diesen Task wieder mit Status "%s".',
1690 '%s changed the task status from "%s" to "%s".' => '%s '.
1691 'änderte den Aufgaben Status von "%s" zu "%s"',
1692
1693
1694 '%s lowered the priority of this task from "%s" to "%s".' => '%s '.
1695 'senkte die Priorität von "%s" auf "%s".',
1696 '%s edited associated projects.' => '%s bearbeitete dazugehörige Projekte.',
1697 '%s awarded a token.' => '%s verlieh eine Auszeichnung.',
1698 '%s set %s to %s.' => '%s setzte %s auf %s.',
1699 '%s edited the task description.' => '%s bearbeitete die Aufgabenbeschreibung.',
1700 '%s updated the description of %s.' => '%s aktualisierte die Beschreibung von %s',
1701 '%s changed %s from %s to %s.' => '%s änderte %s von %s zu %s.',
1702 #Actions
1703 'View Herald Transcript' => 'Herald Transkript ansehen',
1704 'Create Notification Rules' => "Erstelle Benachrichtigungs Regeln",
1705 'Comment' => 'Kommentar',
1706 'Change Status' => 'Status ändern',
1707 'Reassign / Claim' => 'Neu zuweisen / Übernehmen',
1708 'Assign / Claim' => 'Zuweisen / Übernehmen',
1709 'Add CCs' => 'Abonnenten hizufügen',
1710 'Change Priority' => 'Priorität ändern',
1711 'Associate Projects' => 'Projekte hizufügen',
1712 'Task' => 'Aufgabe',
1713 "Done" => "Fertig",
1714 /*'' => '',
1715 '' => '',
1716 '' => '',
1717 '' => '',
1718 '' => '',*/
1719 #Diffusion
1720 'Importing...' => 'Importiert...',
1721 'Empty Repository' => 'Leeres Repository',
1722 'Edit Repository' => 'Repository bearbeiten',
1723 'This repository does not have any commits yet.' =>
1724 'Diese Repository hat noch keine Commits.',
1725 'Clone' => 'Klonen',
1726 'Type' => 'Typ',
1727 'Callsign' => 'Kennung',
1728 'Update Frequency' => 'Update-Frequenz',
1729 'No description provided.' => 'Keine Beschreibung beigefügt.',
1730 'Update Now' => 'Jetzt aktualisieren',
1731 'Repository Active' => 'Repository aktiv',
1732 'Found Binary hg' => 'hg-Binary gefunden',
1733 'No Working Copy Yet' => 'Noch keine funktionierende Kopie',
1734 'Task Daemon Not Running' => 'Aufgaben-Dienst läuft nicht',
1735 'Edit Basic Information' => 'Grundlegende Informationen bearbeiten',
1736 'Deactivate Repository' => 'Repository deaktivieren',
1737 'Delete Repository' => 'Repository löschen',
1738 'Edit Policies' => 'Richtlinien bearbeiten',
1739 'New Repository' => 'Neues Repository',
1740 'No Commits' => 'Keine Commits',
1741 'All Repositories' => 'Alle Repositories',#a uppercase or lowercase?
1742 'Active Repositories' => 'Aktive Repositories',
1743 'Types' => 'Typen',
1744 'Most Recent Commit' => 'Neuestem Commit',
1745 'Creation (Newest First)' => 'Erstellungsdatum (Neuestes zuerst)',
1746 'Creation (Oldest First)' => 'Erstellungsdatum (Ältestes zuerst)',
1747 'Name Contains' => 'Name enthält',
1748 #Flags
1749 'Flag For Later' => 'Für später markieren',
1750 'Remove %s Flag' => 'Markierung %s entfernen',
1751 'Flag %s' => '%s markieren',
1752 'You can flag this %s if you want to remember to look at it later.' =>
1753 'Du kannst diesen %s makieren, um dir zu merken es später anzusehen.',
1754 'Create Flag' => 'Markierung erstellen',
1755 'Note' => 'Notiz',
1756 'Members' => 'Mitglieder',
1757 'Subprojects' => 'Subprojekte',
1758 'Manage' => 'Verwalten',
1759 'Project History' => 'Projekt Historie',
1760 'Looks Like' => 'Aussehen',
1761
1762 #Feed
1763 #'Feed' => 'Neuigkeiten',
1764 'Notifications' => 'Meldungen',
1765 'Connected' => 'Verbunden',
1766 'Disconnected' => 'Nicht Verbunden',
1767 'You have no notifications.' => 'Du hast keine Meldungen.',
1768 'To begin on such a grand journey, requires but just a single step.' =>
1769 'Um diese große Reise zu beginnen, benötigt es nur einen kleinen Schritt.',
1770 'All Stories' => 'Alle Geschichten',
1771 'Notification Server not enabled.' => 'Meldungs-Server nicht eingeschaltet.',
1772 'Notification Server Issue' => 'Problem mit Meldungs-Server',
1773 'Unable to determine server status. This probably means the server '.
1774 'is not in great shape. The specific issue encountered was:' =>
1775 'Der Server Status kann nicht ermittelt werden. Das heißt wahrscheinlich, ' .
1776 'dass der Server keinen guten Zustand hat. Das genaue Problem ist:',
1777 'Notification Server Status' => 'Meldungs-Server Status',
1778 'Mark All Read' => 'Alle als gelesen makieren',
1779 'Really mark all notifications as read?' =>
1780 'Alle Meldungen als gelesen makieren?',
1781 "You can't ignore your problems forever, you know." =>
1782 'Du weißt, du kannst Probleme nicht für immer ignoriren',
1783 'Send Test Notification' => 'Test Meldung senden',
1784
1785 'This is a test notification, sent at %s.' =>
1786 'Dies ist eine Test Meldung, gesendet am %s.',
1787 '%s created %s.' => '%s erstellte %s.',
1788 '%s edited %s.' => '%s bearbeitete %s.',
1789 '%s deleted %s.' => '%s entfernte %s.',
1790 '%s set %s to %s on %s.' => '%s setzte %s auf %s bei %s.',
1791 '%s changed %s from %s to %s on %s.' => '%s änderte %s von %s zu %s bei %s.',
1792 #Diffusion
1793 'Host and Browse Repositories' => 'Hoste und entdecke Repositories',
1794 #Audit
1795 'Browse and Audit Commits' => 'Entdecke und prüfe Commits',
1796 #Projects
1797 'Project' => 'Projekt',
1798 'Projects' => 'Projekte',
1799 'Get Organized' => 'Organisier dich',
1800 'Create Project' => 'Projekt erstellen',
1801 'Create New Project' => 'Neues Projekt erstellen',
1802 'Joined' => 'Beigetreten',
1803 'Active' => 'Aktiv',
1804 '%s created this project.' => '%s hat dieses Projekt erstellt.',
1805 "%s set this project's icon to %s." => '%s änderte das Projekt Symbol zu %s.',
1806 '%s renamed this project from "%s" to "%s".' => '%s benannte dieses Projekt von "%s" in "%s" um.',
1807 "%s set this project's color to %s." => '%s setzte die Projekt Farbe auf %s.',
1808 "%s changed the default filter for the project workboard." => '%s änderte den Standard Filter für das Projekt Workboard.',
1809 "Edit Details" => "Editiere Details",
1810 "Edit Menu" => "Editiere Menü",
1811 "Edit Picture" => "Editiere Bild",
1812 "Archive Project" => "Archiviere Projekt",
1813 "Milestones" => "Meilensteine",
1814 "Has Milestones" => "Hat Meilensteine",
1815 "None Created" => "Keine Erstellt",
1816 "You can create subprojects for this project." => "Du kannst ein Subprojekt für dieses Projekt erstellen.",
1817 "This project has milestones." => "Dieses Projekt hat Meilensteine.",
1818 "Subprojects and milestones are only partially implemented." => "Subprojekte und Meilensteine sind nur partiell implementiert",
1819 "Create Next Milestone" => "Erstelle den nächsten Meilenstein",
1820 "Create Subproject" => "Erstelle Subprojekt",
1821 "Create Milestone" => "Erstelle Meilenstein",
1822 "Milestone" => "Meilenstein",
1823 "Subprojects and Milestones" => "Subprojekte und Meilenstein",
1824 "This project does not have any members." => "Dieses Projekt hat keine Mitgleider.",
1825 "Watchers" => "Beobachter",
1826 "This project does not have any watchers." => "Dieses Projekt hat keine Beobachter.",
1827 "Membership" => "Mitgliedschaft",
1828 "Members and Watchers" => "Mitglieder und Beobachter",
1829 "Members of the parent project are members of this project." => "Mitglieder des Eltern Projekts sind Mitglieder dieses Projekts.",
1830 "Join Project" => "Projekt beitreten",
1831 "Leave Project" => "Projekt verlassen",
1832 "Watch Project" => "Projekt beobachten",
1833 "Disable Mail" => "Email deaktivieren",
1834 "Add Members" => "Mitglieder hinzufügen",
1835 "Lock Project" => "Projekt sperren",
1836 "Members of all subprojects are members of this project." => "Mitglieder von allen Subprojekten sind Mitglieder von diesem Projekt",
1837 "You can create milestones for this project." => "Du kannst Meilensteine für dieses Projekt erstellen",
1838 "Has Subprojects" => "Hat Subprojekte",
1839 "This project has subprojects." => "Dieses Projekt hat Subprojekte",
1840 "Warning" => "Warnung",
1841 'Parent Project' => 'Eltern Projekt',
1842 'Mail to Members' => 'Mail an Mitglieder',
1843 'You will receive mail that is sent to project members.' => 'Du wirst Emails erhalten die an Projekt Mitglieder gesandt werden.',
1844 '%s added a comment to %s.' => '%s kommentierte %s.',
1845 '%s edited the description of %s.' => '%s bearbeitete die Beschreibung von %s.',
1846 '%s edited the content of %s.' => '%s bearbeitete den Inhalt von %s.',
1847 '%s awarded %s a %s token.' => '%s verlieh %s das %s Zeichen.',
1848 '%s triaged %s as "%s" priority.' => '%s setzte die Priorität von %s auf "%s".',
1849 '%s changed the visibility for %s.' => '%s ändete die Sichtbarkeit von %s.',
1850 '%s changed the name of %s from %s to %s.' => '%s bennante %s von %s zu %s um.',
1851 '%s changed the start date of %s from %s to %s.' => '%s ändeterte die Startzeit von %s von %s zu %s.',
1852 '%s set the icon for %s to %s.' => '%s setzte das Symbol von %s auf %s.',
1853 '%s set the color for %s to %s.' => '%s setzte die Farbe von %s auf %s.',
1854 '%s renamed %s from "%s" to "%s".' => '%s hat %s von "%s" in "%s" umbenannt.',
1855 '%s created this object with visibility "%s".' => '%s erstellte dieses Objekt mit Sichtbarkeits Richtlinie"%s".',
1856 '%s created this object with edit policy "%s".' => '%s erstellte dieses Objekt mit Bearbeitungs Richtlinie "%s".',
1857 '%s created this object with join policy "%s".' => '%s erstellte dieses Objekt mit Beitretungs Richtlinie "%s".',
1858 "%s updated this project's image from %s to %s." => "%s änderte das Projekt Bild von %s auf %s.",
1859
1860
1861
1862 #Profiles
1863 'User Accounts and Profiles' => 'Benutzer und Profile',
1864 'Enabled' => 'Aktiviert',
1865 'User' => 'Benutzer',
1866 'User Account' => ' Benutzerkonto',
1867 'People' => 'Personen',
1868 'User Since' => 'Benutzer seit',
1869 'Roles' => 'Rollen',
1870 'Not Approved' => 'Nicht bestätigt',
1871 'Unverified' => 'Nicht Verifiziert',
1872 'Verified' => 'Verifiziert',
1873 'Available' => 'Verfügbar',
1874 'Edit Profile' => 'Profil bearbeiten',
1875 'Edit Profile Picture' => 'Profilbild bearbeiten',
1876 'Remove Administrator' => 'Adminitrator entfernen',
1877 'Change Username' => 'Benutzernamen ändern',
1878 'Disable User' => 'Benutzer deaktivieren',
1879 'Delete User' => 'Benutzer löschen',
1880 'Send Welcome Email' => 'Wilkommensmail senden',
1881 'Basic Policies' => 'Einfache Richtlinie',
1882 'All Users' => 'Alle Benutzer',
1883 'Administrators' => 'Administratoren',
1884 'No One' => 'Niemand',
1885 'User Policies' => 'Benutzer Richtlinie',
1886 'Advanced' => 'Fortgeschitten',
1887 'Custom Policy...' => 'Benutzerdefiniert Richtlinie...',
1888 #Conpherence' => '',
1889 'Conpherence Thread' => 'Conpherence Chat',
1890 'Chat with Others' => 'Diskutiere mit anderen',
1891 'Send Messages' => 'Sende Nachrichten',
1892 'Message' => 'Nachricht',
1893 'Messages' => 'Nachrichten',
1894 'You have no messages.' => 'Du hast keine Nachrichten',
1895 'To' => 'An',
1896 'Participants' => 'Teilnehmer',
1897 'Add Participants' => 'Teilnehmer hinzufügen',
1898 'Email me every update.' => 'Maile jede Aktualisierung.',
1899 'Notifications only.' => 'Nur Meldungen.',
1900 'Send Message' => 'Nachricht senden',
1901 'New Message' => 'Neue Nachricht',
1902 'Join a Room' => 'Einem Raum beitreten',
1903 'Create a Room' => 'Einen Raum erstellen',
1904 'No Messages' => 'Keine Nachrichten',
1905 'Messages: %d' => '%d Nachrichten',
1906 'Last updated %s' => 'Letzte Aktualisierung %s',
1907 '%s named this room "%s".' => '%s nannte den Chatroom "%s".',
1908 '%s changed the edit policy of this room from "%s" to "%s".' =>
1909 '%s änderte die Bearbeitungsrichtlinie dieses Chatrooms von "%s" zu "%s".',
1910 '%s changed the visibility of this room from "%s" to "%s".' =>
1911 '%s änderte die Sichtbarkeit dieses Chatrooms von "%s" zu "%s".',
1912 #Phriction
1913 'Last Author' => 'Letzter Autor',
1914 'Updated %s' => 'Aktualisiert %s',
1915 '%d Days Ago' => 'vor %d Tagen',
1916 'Table of Contents' => 'Inhaltsverzeichnis',
1917 'Document Hierarchy' => 'Dokumenten Hirarchie',
1918 'New Document' => 'Neues Dokument',
1919 'Edit Document' => 'Dokument bearbeiten',
1920 'Move Document' => 'Dokument verschieben',
1921 'View History' => 'Versionshistorie anzeigen',
1922 'Delete' => 'Löschen',
1923 'Delete Document' => 'Dokument löschen',
1924 'Delete Document?' => 'Dokument löschen',
1925 'Current Path' => 'Aktueller Pfad',
1926 'New Path' => 'Neuer Pfad',
1927 'Content' => 'Inhalt',
1928 'Edit Notes' => 'Notizen zur Veränderung',
1929 'To view a wiki document, you must also be able to view all of its parents.'=>
1930 'Um ein Wiki-Dokument anzusehen, musst du alle übergeordneten Dokumente sehen dürfen.',
1931 #Calendar
1932 'Event' => 'Termin',
1933 'Calendar Event' => 'Kalender Termin',
1934 'Calendar' => 'Kalender',
1935 'From %s to %s' => 'Von %s bis %s',
1936 'Create Event' => 'Termin erstellen',
1937 'Create Private Event' => 'Privaten Termin erstellen',
1938 'Create Public Event' => 'Öffentlichen Termin erstellen',
1939 'Choose Icon...' => 'Symbol auswählen...',
1940 'Choose Calendar Event Icon' => 'Termin Symbol wählen',
1941 'Edit Event' => 'Termin bearbeiten',
1942 'Join Event' => 'Teilnehmen',
1943 'Decline' => 'Ablehnen',
1944 'Accept' => 'Akzeptieren',
1945 'Would you like to join this event?' =>
1946 'Möchtest du an diesem Termin teilnehmen?',
1947 'Decline Event' => 'Teilnahme absagen',
1948 'Cancel Event' => 'Termin absagen',
1949 'You can always reinstate the event later.' =>
1950 'Du kannst den Termin später wiederherstellen.',
1951 "Don't Cancel Event" => 'Termin nicht absagen',
1952 'Reinstate Event' => 'Termin wiederherstellen',
1953 'Reinstate this event?' => 'Diesen Termin wiederherstellen?',
1954 "Don't Reinstate Event" => 'Termin abgesagt belassen',
1955 'Clear sailing ahead.' => 'Freie Fahrt voraus.',
1956 'No events found.' => 'Keine Termine gefunden.',
1957 'My Events' => 'Meine Termine',
1958 'End' => 'Ende',
1959 'Starts' => 'Beginnt',
1960 'Ends' => 'Endet',
1961 'Invitees' => 'Teilnehmer',
1962 'All Day Event' => 'Ganztägiger Termin',
1963 'Month View' => 'Monats Ansicht',
1964 'Day View' => 'Tages Ansicht',
1965 'Upcoming Events' => 'Kommende Termine',
1966 'All Events' => 'Alle Termine',
1967 'Created By' => 'Erstellt von',
1968 'Invited' => 'Teilnehmer',
1969 'Occurs After' => 'Nach',
1970 'Occurs Before' => 'Vor',
1971 'Show only upcoming events.' => 'Zeige nur kommende Termine',
1972 'Cancelled Events' => 'Abgesagte Termine',
1973 'Display Options' => 'Anzeige Optionen',
1974 'Add To Plate' => 'An die Tafel schreiben...',
1975 '%s created this event.' => '%s erstellete diesen Termin.',
1976 '%s edited this %s.' => '%s bearbeitete diesen %s.',
1977 '%s changed the name of this event from %s to %s.' =>
1978 '%s bennante diesen Termin von %s zu %s um.',
1979 '%s made this an all day event.' => '%s machte dies zu einem Ganztagstermin.',
1980 '%s converted this from an all day event.' => '%s deaktivierte den Ganztagstermin status.',
1981 "%s updated the event's description." =>' %s aktualisierte die Terminbeschreibung',
1982 '%s invited %s.' => '%s lud %s ein.',
1983 '%s has joined this event.' => '%s ist dem Termin beigetreten.',
1984 '%s is attending this event.' => '%s nimmt teil.',
1985 '%s is attending %s.' => '%s nimmt an %s teil.',
1986 'Would you like to decline this event?' =>
1987 'Möchtest du wirklich nicht teilnehmen?',
1988 '%s has declined this event.' => '%s kann nicht teilnehmen.',
1989 '%s has declined %s.' => '%s kann nicht an %s teilnehmen.',
1990 '%s cancelled this event.' => '%s sagte den Termin ab.',
1991 '%s cancelled %s.' => '%s sagte %s ab.',
1992 '%s reinstated this event.' => '%s hat den Termin wiederhergestellt',
1993 '%s reinstated %s.' => '%s hat %s wiederhergestellt',
1994 '%s edited the end date of this event.' => '%s änderte die Endzeit des Termins.',
1995 '%s edited the start date of this event.' => '%s änderte die Startzeit des Termins.',
1996 "%s set this event's icon to %s." => '%s setzte das Terminsymbol auf %s',
1997 '%s invited %s to %s.' => '%s lud %s zu %s ein.',
1998 '%s made %s an all day event.' => '%s machte %s zu einem Ganztagstermin.',
1999 '%s converted %s from an all day event.' => '%s deaktivierte den Ganztagstermin status von %s',
2000
2001 #Files' => '',
2002 'Files' => 'Dateien',
2003 'Store and Share Files' => 'Speichere und teile Dateien',
2004 'Drop Files to Upload' => 'Lege Dateien zum Hochladen ab',
2005 'Image' => 'Bild',
2006 'Countdown to Events' => 'Countdown zu Events',
2007 #Settings
2008 'Settings' => 'Einstellungen',
2009 'Edit Settings' => 'Einstellungen bearbeiten',
2010 'Save Preferences' => 'Einstellungen speichern',
2011 'Save Account Settings' => 'Einstellungen speichern',
2012 'Account Settings' => "Profil Einstellungen",
2013 'Account' => 'Profil',
2014 'Translation' => 'Übersetzung',
2015 'Pronoun' => 'Ansprache',
2016 '%s updated their profile' => '%s haben ihr Profil aktualisiert',
2017 '%s updated his profile' => '%s hat sein Profil aktualisiert',
2018 '%s updated her profile' => '%s hat ihr Profil aktualisiert',
2019 '**Choose the pronoun you prefer:**' => "(WARNING)Version 2.3.1 " .
2020 "zu Phabricator Version [76665f725bc9](https://secure.phabricator.com/rP76665f725bc90c5122b4f9f5cf80b75fedbdf885)" .
2021 "\n\n___\n\n**Wähle deine bevorzugte Ansprache:**",
2022 'Date and Time Settings' => 'Datum und Zeiteinstellungen',
2023 'Timezone' => 'Zeitzone',
2024 'Time-of-Day Format' => 'Uhrzeit Format',
2025 'Format used when rendering a time of day.' => 'Format, das benutzt wird, um die Tageszeit darzustellen.',
2026 'Date Format' => 'Datum Format',
2027 'Format used when rendering a date.' => 'Format, das benutzt wird, um ein Datum darzustellen.',
2028 'European (28-02-2000)' => 'Europäisch (28-02-2000)',
2029 'Week Starts On' => 'Woche startet am',
2030 'Calendar weeks will start with this day.' => 'Kalender Wochen beginnen mit diesem Tag.',
2031 '12-hour (2:34 PM)' => '12 Stunden (2:34 PM)',
2032 '24-hour (14:34)' => '24 Stunden (14:34)',
2033 #Config
2034 'Configure Phabricator' => 'Konfiguriere Phabricator',
2035
2036 #404
2037 'Do not dwell in the past, do not dream of the future, '.
2038 'concentrate the mind on the present moment.' => 'Verbleibe '.
2039 'nicht in der Vergangenheit, träume nicht von der Zukunft, '.
2040 'Konzentriere dich auf den gegenwärtigen Moment.',
2041 'Focus' => 'Konzentrieren',
2042 #Auth' => '',
2043 'Login to Phabricator' => 'Anmelden bei Phabricator',
2044 'Username or Email' => 'Benutzername oder Email',
2045 'Password' => 'Passwort',
2046 'Forgot your password?' => 'Passwort vergessen?',
2047 'Register New Account' => 'Neuen Account erstellen',
2048 'Phabricator Username' => 'Phabricator Benutzername',
2049 'Real Name' => 'Echter Name',
2050 'Confirm Password' => 'Passwort bestätigen',
2051 'Minimum length of %d characters.' => 'Minimale Länge von %d Buchstaben.',
2052 'Register Phabricator Account' => 'Registriere Phabricator Account',
2053 'Login' => 'Anmelden',
2054 'Log out of Phabricator?' => 'Ausloggen',
2055 'Are you sure you want to log out?' => 'Bist du sicher, dass du dich abmelden willst?',
2056 'Log Out' => 'Ausloggen',
2057 'Logout' => 'Abmelden',
2058 #Date/Time
2059 'Date' => 'Datum',
2060 'Time' => 'Zeit',
2061 'Date and Time' => 'Datum und Uhrzeit',
2062 #Days
2063 'MTWTFSS' => 'MDMDFSS',
2064 'Mon' => 'Mo',
2065 'Tue' => 'Di',
2066 'Wed' => 'Mi',
2067 'Thu' => 'Do',
2068 'Fri' => 'Fr',
2069 'Sat' => 'Sa',
2070 'Sun' => 'So',
2071 'Monday' => 'Montag',
2072 'Tuesday' => 'Dienstag',
2073 'Wednesday' => 'Mittwoch',
2074 'Thursday' => 'Donnerstag',
2075 'Friday' => 'Freitag',
2076 'Saturday' => 'Samstag',
2077 'Sunday' => 'Sonntag',
2078 'Yesterday' => 'Gestern',
2079 'Today' => 'Heute',
2080 'Tomorrow' => 'Morgen',
2081 #Months
2082 'Mar' => 'Mär',
2083 'May' => 'Mai',
2084 'Oct' => 'Okt',
2085 'Dec' => 'Dez',
2086 'January' => 'Januar',
2087 'February' => 'Februar',
2088 'March' => 'März',
2089 'April' => 'April',
2090 'June' => 'Juni',
2091 'July' => 'Juli',
2092 'October' => 'Oktober',
2093 'November' => 'November',
2094 'December' => 'Dezember'
2095 );
2096 }
2097}

As I wrote at T10015 Translatewiki is maybe a good, free way to translate it. They translate open source projects like mediawiki, or like phabricator maybe in future. See here for details.

See also T5267. I found that task by searching for "translatewiki" in the global search.

I've just shared some common strings into french. It's on GitHub : Phabricator French Translation.

Don't hesitate to contribute !

JOY awarded a token.Feb 11 2016, 1:26 PM
JOY added a subscriber: JOY.Feb 12 2016, 4:04 PM
ofbeaton added a subscriber: ofbeaton.

Thanks @CamilleBouliere we have a requirement to provide FR translations in our organization, so this was invaluable. I hope it is eventually incorporated upsteam!

I'm going to merge this into T5267, which is more actionable in the short term.

After D15974, translations no longer need to coordinate with the upstream to add gender/plural rules.

After D15979, all locales we've seen users write themselves are now available in the upstream: Czech, French, German, Portuguese, Simplified Chinese (plus Emoji and Canadageese).

In T5267, we expect to make Phabricator translatable via translatewiki.net. Although this won't be an official upstream effort (at least, for now) it should provide a much better platform for translating Phabricator than is currently available and we expect to recommend that users who are interested in providing translations contribute to that effort once things are ready.

urzds added a subscriber: urzds.Jul 12 2017, 11:15 AM