Migarate AdvancedCharacterCount to string catalog

This commit is contained in:
1024jp 2024-02-13 00:55:27 +09:00
parent 986f62c620
commit ce9d00b6b1
18 changed files with 2098 additions and 838 deletions

View File

@ -240,6 +240,8 @@
2A53F56727585A0E00ED16DF /* RegularExpressionReferenceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A53F56627585A0E00ED16DF /* RegularExpressionReferenceView.swift */; };
2A53F56827585A0E00ED16DF /* RegularExpressionReferenceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A53F56627585A0E00ED16DF /* RegularExpressionReferenceView.swift */; };
2A54BE2C1D40EB24000816B0 /* LineEndingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A54BE2B1D40EB24000816B0 /* LineEndingTests.swift */; };
2A55D5D82B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2A55D5D72B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings */; };
2A55D5D92B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 2A55D5D72B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings */; };
2A57B98F294ED75900771696 /* RangedIntegerFormatStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A57B98E294ED75900771696 /* RangedIntegerFormatStyle.swift */; };
2A57B990294ED75900771696 /* RangedIntegerFormatStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A57B98E294ED75900771696 /* RangedIntegerFormatStyle.swift */; };
2A57B992294EDD9600771696 /* FormatStylesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A57B991294EDD9600771696 /* FormatStylesTests.swift */; };
@ -956,6 +958,7 @@
2A50AA61204D513500D10A10 /* DocumentFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentFile.swift; sourceTree = "<group>"; };
2A53F56627585A0E00ED16DF /* RegularExpressionReferenceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegularExpressionReferenceView.swift; sourceTree = "<group>"; };
2A54BE2B1D40EB24000816B0 /* LineEndingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineEndingTests.swift; sourceTree = "<group>"; };
2A55D5D72B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = AdvancedCharacterCount.xcstrings; sourceTree = "<group>"; };
2A57B98E294ED75900771696 /* RangedIntegerFormatStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RangedIntegerFormatStyle.swift; sourceTree = "<group>"; };
2A57B991294EDD9600771696 /* FormatStylesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormatStylesTests.swift; sourceTree = "<group>"; };
2A59B7022957089A0094F03B /* LinkButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkButton.swift; sourceTree = "<group>"; };
@ -2121,6 +2124,7 @@
2AC94B212B6E26F40086F9F2 /* Inspector.xcstrings */,
2AC94B3A2B6EAAE90086F9F2 /* RegexReference.xcstrings */,
2AA6E0B82B744FF300E536F8 /* SyntaxEdit.xcstrings */,
2A55D5D72B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings */,
2AA2E0111BFE12620087BDD6 /* UnicodeBlock.strings */,
2A36E3702AF9ED0B00A73534 /* Sparkle.xcstrings */,
);
@ -2504,6 +2508,7 @@
2AC94B222B6E26F40086F9F2 /* Inspector.xcstrings in Resources */,
2AC94B3B2B6EAAE90086F9F2 /* RegexReference.xcstrings in Resources */,
2A6566E92B73BBB400008669 /* SyntaxEdit.xcstrings in Resources */,
2A55D5D82B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings in Resources */,
2AA2E0141BFE12620087BDD6 /* UnicodeBlock.strings in Resources */,
2A836F811D572A5D0044E8EC /* Main.storyboard in Resources */,
2ACDE28D2406B9C000FC31EC /* AppearancePane.storyboard in Resources */,
@ -2565,6 +2570,7 @@
2AC94B232B6E26F40086F9F2 /* Inspector.xcstrings in Resources */,
2AC94B3C2B6EAAE90086F9F2 /* RegexReference.xcstrings in Resources */,
2AA6E0C82B75AC4900E536F8 /* SyntaxEdit.xcstrings in Resources */,
2A55D5D92B7A728A0092DE48 /* AdvancedCharacterCount.xcstrings in Resources */,
2A36E36F2AF9ED0B00A73534 /* Sparkle.xcstrings in Resources */,
2AA2E0131BFE12620087BDD6 /* UnicodeBlock.strings in Resources */,
2A836F801D572A5D0044E8EC /* Main.storyboard in Resources */,

File diff suppressed because it is too large Load Diff

View File

@ -38,10 +38,10 @@ struct AdvancedCharacterCounterView: View {
HStack(alignment: .firstTextBaseline) {
if let count = self.count {
let markdown: AttributedString = switch self.counter.setting.unit {
case .byte: .init(localized: "*\(count)* byte(s)", table: "Count", locale: .current,
comment: "Counter for Advanced Character Count")
default: .init(localized: "*\(count)* character(s)", table: "Count", locale: .current,
comment: "Counter for Advanced Character Count")
case .byte: .init(localized: "*\(count)* byte(s)", table: "AdvancedCharacterCount", locale: .current,
comment: "counter for advanced character count")
default: .init(localized: "*\(count)* character(s)", table: "AdvancedCharacterCount", locale: .current,
comment: "counter for advanced character count")
}
let attributes = AttributeContainer
.font(.body.monospacedDigit().weight(.medium))
@ -53,7 +53,7 @@ struct AdvancedCharacterCounterView: View {
.foregroundStyle(.secondary)
} else {
Label("failed", systemImage: "exclamationmark.triangle")
Label(String(localized: "failed", table: "AdvancedCharacterCount", comment: "error message when count failed"), systemImage: "exclamationmark.triangle")
.symbolVariant(.fill)
.symbolRenderingMode(.multicolor)
.foregroundStyle(.secondary)
@ -66,11 +66,11 @@ struct AdvancedCharacterCounterView: View {
} label: {
Image(systemName: "gearshape")
.symbolVariant(.fill)
.accessibilityLabel("Show options")
.accessibilityLabel(String(localized: "Show options", table: "AdvancedCharacterCount"))
}
.buttonStyle(.plain)
.foregroundStyle(.secondary)
.help("Show options")
.help(String(localized: "Show options", table: "AdvancedCharacterCount", comment: "tooltip"))
.popover(isPresented: self.$isSettingPresented) {
VStack {
CharacterCountOptionsView()
@ -87,13 +87,16 @@ struct AdvancedCharacterCounterView: View {
.onTapGesture { } // avoid clicking through
.contextMenu {
if let count = self.count {
Button("Copy") {
Button(String(localized: "Copy", table: "AdvancedCharacterCount", comment: "menu item")) {
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(String(count), forType: .string)
}
Divider()
}
Button("Stop Count", action: self.dismissAction)
Button(String(localized: "Stop Count", table: "AdvancedCharacterCount",
comment: "menu item (This “Stop” should be translated the same as it is in the “Stop Advanced Character Count” menu label.)")) {
self.dismissAction()
}
}
}

View File

@ -44,7 +44,7 @@ struct CharacterCountOptionsSheetView: View {
Spacer()
SubmitButtonGroup(String(localized: "Start")) {
SubmitButtonGroup(String(localized: "Start", table: "AdvancedCharacterCount", comment: "button label")) {
self.completionHandler()
self.parent?.dismiss(nil)
} cancelAction: {

View File

@ -36,36 +36,40 @@ struct CharacterCountOptionsView: View {
Grid(alignment: .topLeading) {
GridRow {
Text("Whitespace:")
Text("Whitespace:", tableName: "AdvancedCharacterCount", comment: "label")
.gridColumnAlignment(.trailing)
VStack(alignment: .leading, spacing: 6) {
Toggle("Ignore line endings", isOn: $setting.ignoresNewlines)
Toggle("Ignore whitespace", isOn: $setting.ignoresWhitespaces)
Toggle("Treat consecutive whitespace as one space", isOn: $setting.treatsConsecutiveWhitespaceAsSingle)
.disabled(self.setting.ignoresNewlines && self.setting.ignoresWhitespaces)
Toggle(String(localized: "Ignore line endings", table: "AdvancedCharacterCount", comment: "setting option"),
isOn: $setting.ignoresNewlines)
Toggle(String(localized: "Ignore whitespace", table: "AdvancedCharacterCount", comment: "setting option"),
isOn: $setting.ignoresWhitespaces)
Toggle(String(localized: "Treat consecutive whitespace as one space", table: "AdvancedCharacterCount", comment: "setting option"),
isOn: $setting.treatsConsecutiveWhitespaceAsSingle)
.disabled(self.setting.ignoresNewlines && self.setting.ignoresWhitespaces)
}
}.fixedSize()
GridRow {
Text("Unit:")
Text("Unit:", tableName: "AdvancedCharacterCount", comment: "label")
VStack(alignment: .leading) {
Picker("Unit:", selection: $setting.unit.animation()) {
Picker(selection: $setting.unit.animation()) {
ForEach(CharacterCountOptions.CharacterUnit.allCases, id: \.self) {
Text($0.label)
}
}.labelsHidden()
.fixedSize()
} label: {
EmptyView()
}.fixedSize()
Text(self.setting.unit.description)
.foregroundStyle(.secondary)
.controlSize(.small)
.frame(width: max(300, self.contentWidth ?? 0), alignment: .leading)
.fixedSize()
if self.setting.unit == .byte {
Picker("Encoding:", selection: self.$setting.encoding) {
Picker(String(localized: "Encoding:", table: "AdvancedCharacterCount", comment: "label"), selection: self.$setting.encoding) {
ForEach(String.sortedAvailableStringEncodings.indices, id: \.self) { index in
if let encoding = String.sortedAvailableStringEncodings[index] {
Text(String.localizedName(of: encoding))
@ -80,8 +84,8 @@ struct CharacterCountOptionsView: View {
if self.setting.unit != .graphemeCluster {
HStack(alignment: .firstTextBaseline) {
Toggle("Normalization:", isOn: $setting.normalizes)
Picker("Normalization:", selection: $setting.normalizationForm) {
Toggle(String(localized: "Normalization:", table: "AdvancedCharacterCount", comment: "label"), isOn: $setting.normalizes)
Picker(selection: $setting.normalizationForm) {
Section {
ForEach(UnicodeNormalizationForm.standardForms, id: \.self) { form in
Text(form.localizedName)
@ -94,8 +98,9 @@ struct CharacterCountOptionsView: View {
.help(form.localizedDescription)
}
}
} label: {
EmptyView()
}
.labelsHidden()
.disabled(!self.setting.normalizes)
}.fixedSize()
}
@ -113,28 +118,56 @@ struct CharacterCountOptionsView: View {
private extension CharacterCountOptions.CharacterUnit {
var label: LocalizedStringKey {
var label: String {
switch self {
case .graphemeCluster: "Grapheme cluster"
case .unicodeScalar: "Unicode scalar"
case .utf16: "UTF-16"
case .byte: "Byte"
case .graphemeCluster:
String(localized: "CharacterUnit.graphemeCluster.label",
defaultValue: "Grapheme cluster",
table: "AdvancedCharacterCount",
comment: "count unit (technical term defined in Unicode)")
case .unicodeScalar:
String(localized: "CharacterUnit.unicodeScalar.label",
defaultValue: "Unicode scalar",
table: "AdvancedCharacterCount",
comment: "count unit")
case .utf16:
String(localized: "CharacterUnit.utf16.label",
defaultValue: "UTF-16",
table: "AdvancedCharacterCount",
comment: "count unit")
case .byte:
String(localized: "CharacterUnit.byte.label",
defaultValue: "Byte",
table: "AdvancedCharacterCount",
comment: "count unit")
}
}
var description: LocalizedStringKey {
var description: String {
switch self {
case .graphemeCluster:
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character."
String(localized: "CharacterUnit.graphemeCluster.description",
defaultValue: "Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character.",
table: "AdvancedCharacterCount",
comment: "description for grapheme cluster")
case .unicodeScalar:
"Count Unicode code points. Same as counting UTF-32."
String(localized: "CharacterUnit.unicodeScalar.description",
defaultValue: "Count Unicode code points. Same as counting UTF-32.",
table: "AdvancedCharacterCount",
comment: "description for unicode scalar")
case .utf16:
"Count Unicode code points but a surrogate pair as two characters."
String(localized: "CharacterUnit.utf16.description",
defaultValue: "Count Unicode code points but a surrogate pair as two characters.",
table: "AdvancedCharacterCount",
comment: "description for UTF-16")
case .byte:
"Count bytes of the text encoded with the specified encoding."
String(localized: "CharacterUnit.byte.description",
defaultValue: "Count bytes of the text encoded with the specified encoding.",
table: "AdvancedCharacterCount",
comment: "description for byte")
}
}
}
@ -145,4 +178,5 @@ private extension CharacterCountOptions.CharacterUnit {
#Preview {
CharacterCountOptionsView()
.scenePadding()
}

View File

@ -9,7 +9,7 @@
// ---------------------------------------------------------------------------
//
// © 2004-2007 nakamuxu
// © 2014-2023 1024jp
// © 2014-2024 1024jp
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -418,8 +418,8 @@ extension EditorTextViewController: NSUserInterfaceValidations {
switch item.action {
case #selector(toggleAdvancedCounter):
(item as? NSMenuItem)?.title = (self.advancedCounterView == nil)
? String(localized: "Advanced Character Count…")
: String(localized: "Stop Advanced Character Count")
? String(localized: "Advanced Character Count…", table: "AdvancedCharacterCount", comment: "menu item")
: String(localized: "Stop Advanced Character Count", table: "AdvancedCharacterCount", comment: "menu item")
return true
case #selector(showSelectionInfo):

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "Zrušit";
"Done" = "Hotovo";
"Start" = "Start";
"Restore Defaults" = "Výchozí hodnoty";
"Delete" = "Smazat";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "Nebyl zjištěn žádný text";
"Detection failed" = "Detekce selhala";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Pokročilé počítání znaků…";
"Stop Advanced Character Count" = "Zastavit pokročilé počítání znaků";
// error message when counting failed
"failed" = "selhání";
// tooltip
"Show options" = "Zobrazit volby";
// context menu item labels
"Copy" = "Kopírovat";
"Stop Count" = "Zastavit počítání"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Mezery:";
"Ignore line endings" = "Ignorovat konce řádků";
"Ignore whitespace" = "Ignorovat mezery";
"Treat consecutive whitespace as one space" = "Považovat po sobě jdoucí prázdné znaky za jednu mezeru";
"Unit:" = "Jednotka:";
"Grapheme cluster" = "Klastr grafémů"; // technical term defined in Unicode
"Unicode scalar" = "Skalár Unicode";
"UTF-16" = "UTF-16";
"Byte" = "Bajty";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Počítat intuitivním způsobem definovaným v Unicode. Znak složený z více kódových bodů Unicode, například emotikony, se počítá jako jeden znak.";
"Count Unicode code points. Same as counting UTF-32." = "Počítat kódové body Unicode. Stejné jako počítání UTF-32.";
"Count Unicode code points but a surrogate pair as two characters." = "Počítat kódové body Unicode, ale náhradní dvojici jako dva znaky.";
"Count bytes of the text encoded with the specified encoding." = "Počítat bajty textu kódovaného zadaným kódováním.";
"Encoding:" = "Kódování:";
"Normalization:" = "Normalizace:";

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "Abbrechen";
"Done" = "Fertig";
"Start" = "Start";
"Restore Defaults" = "Standard wiederherstellen";
"Delete" = "Löschen";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "Kein Text erkennt";
"Detection failed" = "Erkennung fehlgeschlagen";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Erweiterte Zeichenanzahl …";
"Stop Advanced Character Count" = "Erweiterte Zeichenanzahl stoppen";
// error message when counting failed
"failed" = "fehlgeschlagen";
// tooltip
"Show options" = "Optionen einblenden";
// context menu item labels
"Copy" = "Kopieren";
"Stop Count" = "Anzahl stoppen"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Leerzeichen:";
"Ignore line endings" = "Zeilenumbrüche ignorieren";
"Ignore whitespace" = "Leerzeichen ignorieren";
"Treat consecutive whitespace as one space" = "Aufeinander folgende Leerzeichen als ein Zeichen behandeln";
"Unit:" = "Einheit:";
"Grapheme cluster" = "Graphemhaufen"; // technical term defined in Unicode
"Unicode scalar" = "Unicode-Skalar";
"UTF-16" = "UTF-16";
"Byte" = "Byte";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Auf intuitive Weise, die in Unicode definiert ist, zahlen. Das aus mehreren Unicode-Codepunkten bestehende Zeichen, wie Emojis, wird als ein Zeichen gezählt.";
"Count Unicode code points. Same as counting UTF-32." = "Unicode-Codepunkte zahlen. Das gleiche wie UTF-32 zu zählen.";
"Count Unicode code points but a surrogate pair as two characters." = "Unicode-Codepunkte aber Surrogate-Paaren als zwei Zeichen zahlen.";
"Count bytes of the text encoded with the specified encoding." = "Bytes des mit der angegebenen Codierung codierten Textes zahlen.";
"Encoding:" = "Codierung:";
"Normalization:" = "Normalisierung:";

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "Cancel";
"Done" = "Done";
"Start" = "Start";
"Restore Defaults" = "Restore Defaults";
"Delete" = "Delete";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "No text detected";
"Detection failed" = "Detection failed";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Advanced Character Count…";
"Stop Advanced Character Count" = "Stop Advanced Character Count";
// error message when counting failed
"failed" = "failed";
// tooltip
"Show options" = "Show options";
// context menu item labels
"Copy" = "Copy";
"Stop Count" = "Stop Count"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Whitespace:";
"Ignore line endings" = "Ignore line endings";
"Ignore whitespace" = "Ignore whitespace";
"Treat consecutive whitespace as one space" = "Treat consecutive whitespace as one space";
"Unit:" = "Unit:";
"Grapheme cluster" = "Grapheme cluster"; // technical term defined in Unicode
"Unicode scalar" = "Unicode scalar";
"UTF-16" = "UTF-16";
"Byte" = "Byte";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character.";
"Count Unicode code points. Same as counting UTF-32." = "Count Unicode code points. Same as counting UTF-32.";
"Count Unicode code points but a surrogate pair as two characters." = "Count Unicode code points but a surrogate pair as two characters.";
"Count bytes of the text encoded with the specified encoding." = "Count bytes of the text encoded with the specified encoding.";
"Encoding:" = "Encoding:";
"Normalization:" = "Normalisation:";

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "Cancelar";
"Done" = "OK";
"Start" = "Iniciar";
"Restore Defaults" = "Restaurar valores por omisión";
"Delete" = "Eliminar";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "No se detectó texto"; // FIXME: needs review
"Detection failed" = "La detección falló"; // FIXME: needs review
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Recuento avanzado de caracteres…";
"Stop Advanced Character Count" = "Detener el recuento avanzado de caracteres";
// error message when counting failed
"failed" = "Falló";
// tooltip
"Show options" = "Mostrar opciones";
// context menu item labels
"Copy" = "Copiar";
"Stop Count" = "Parar cuenta"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Espacio en blanco:";
"Ignore line endings" = "Ignorar los finales de línea";
"Ignore whitespace" = "Ignorar los espacios en blanco";
"Treat consecutive whitespace as one space" = "Trata los espacios en blanco consecutivos como un solo espacio";
"Unit:" = "Unidad:";
"Grapheme cluster" = "Grupo de Grafemas"; // technical term defined in Unicode
"Unicode scalar" = "Unicode escalar";
"UTF-16" = "UTF-16";
"Byte" = "Byte";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Cuenta de la manera intuitiva definida en Unicode. Un carácter que consta de múltiples puntos de código Unicode, como emojis, se cuenta como un carácter.";
"Count Unicode code points. Same as counting UTF-32." = "Cuenta los puntos de código Unicode. Igual que contar UTF-32.";
"Count Unicode code points but a surrogate pair as two characters." = "Cuenta los puntos de código Unicode, pero un par sustituto como dos caracteres.";
"Count bytes of the text encoded with the specified encoding." = "Contar los bytes del texto codificado con la codificación especificada.";
"Encoding:" = "Codificación:";
"Normalization:" = "Normalización:";

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "Annuler";
"Done" = "OK";
"Start" = "Démarrer";
"Restore Defaults" = "Réglages par défaut";
"Delete" = "Supprimer";
@ -874,39 +873,3 @@
// error messages
"No text detected" = "Aucun texte détecté";
"Detection failed" = "Échec de la détection";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Comptage de caractères avancé…";
"Stop Advanced Character Count" = "Arrêter le comptage de caractères avancé";
// error message when counting failed
"failed" = "échec";
// tooltip
"Show options" = "Afficher les options";
// context menu item labels
"Copy" = "Copier";
"Stop Count" = "Arrêter le comptage"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Espaces :";
"Ignore line endings" = "Ignorer les fins de lignes";
"Ignore whitespace" = "Ignorer les espaces";
"Treat consecutive whitespace as one space" = "Compter les espaces consécutifs comme un seul";
"Unit:" = "Unité :";
"Grapheme cluster" = "Grapheme cluster"; // technical term defined in Unicode
"Unicode scalar" = "Scalaire Unicode";
"UTF-16" = "UTF-16";
"Byte" = "Byte";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Comptage intuitif tel que défini par Unicode. Un caractère comprenant plusieurs points de code Unicode, par exemple un emoji, sont comptés comme un seul caractère.";
"Count Unicode code points. Same as counting UTF-32." = "Count Unicode code points. Same as counting UTF-32.";
"Count Unicode code points but a surrogate pair as two characters." = "Compter les points de code Unicode, mais les paires de caractères de substitution comme deux caractères.";
"Count bytes of the text encoded with the specified encoding." = "Compter les bytes de texte encodé selon lencodage spécifié.";
"Encoding:" = "Encodage :";
"Normalization:" = "Normalisation :";

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "Annulla";
"Done" = "Fine";
"Start" = "Inizio";
"Restore Defaults" = "Ripristina default";
"Delete" = "Elimina";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "Nessun testo individuato";
"Detection failed" = "Individuazione fallita";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Conteggio caratteri avanzato…";
"Stop Advanced Character Count" = "Interrompi il conteggio caratteri avanzato";
// error message when counting failed
"failed" = "non riuscito";
// tooltip
"Show options" = "Mostra opzioni";
// context menu item labels
"Copy" = "Copia";
"Stop Count" = "Interrompi il conteggio"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Spazi bianchi:";
"Ignore line endings" = "Ignora i fine riga";
"Ignore whitespace" = "Ignora gli spazi bianchi";
"Treat consecutive whitespace as one space" = "Tratta spazi bianchi consecutivi come un unico spazio";
"Unit:" = "Unità:";
"Grapheme cluster" = "Raggruppamento di Grapheme"; // technical term defined in Unicode
"Unicode scalar" = "Scalare Unicode";
"UTF-16" = "UTF-16";
"Byte" = "Byte";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Conta nel modo intuitivo definito in Unicode. Un carattere composto di più codici Unicode, come un emoji, è conteggiato come carattere unico.";
"Count Unicode code points. Same as counting UTF-32." = "Conta i codici Unicode, come nella codifica UTF-32.";
"Count Unicode code points but a surrogate pair as two characters." = "Conta i codici Unicode ma considera una coppia di caratteri sostitutivi come due caratteri.";
"Count bytes of the text encoded with the specified encoding." = "Conta i byte del testo codificato secondo la codifica specificata.";
"Encoding:" = "Codifica:";
"Normalization:" = "Normalizzazione:";

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "キャンセル";
"Done" = "完了";
"Start" = "開始";
"Restore Defaults" = "デフォルトに戻す";
"Delete" = "削除";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "テキストが検出されませんでした";
"Detection failed" = "検出に失敗しました";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "高度な文字カウント…";
"Stop Advanced Character Count" = "高度な文字カウントを停止";
// error message when counting failed
"failed" = "失敗";
// tooltip
"Show options" = "オプションを表示";
// context menu item labels
"Copy" = "コピー";
"Stop Count" = "カウントを停止"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "空白:";
"Ignore line endings" = "改行を無視";
"Ignore whitespace" = "空白を無視";
"Treat consecutive whitespace as one space" = "連続する空白を1文字として扱う";
"Unit:" = "単位:";
"Grapheme cluster" = "書記素クラスタ";
"Unicode scalar" = "Unicodeスカラー";
"UTF-16" = "UTF-16";
"Byte" = "バイト";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Unicodeで定義されている人の感覚に近い単位でカウントします。絵文字など複数のUnicodeコードポイントから成る文字も1文字で数えます。";
"Count Unicode code points. Same as counting UTF-32." = "Unicodeコードポイント単位でカウントします。UTF-32のカウントと同一です。";
"Count Unicode code points but a surrogate pair as two characters." = "Unicodeコードポイント単位でカウントしますがサロゲートペアは2文字でカウントします。";
"Count bytes of the text encoded with the specified encoding." = "指定したエンコーディングでエンコードしたときのバイト長をカウントします。";
"Encoding:" = "エンコーディング:";
"Normalization:" = "正規化:";

View File

@ -1,400 +1,6 @@
{
"sourceLanguage" : "en",
"strings" : {
"*%lld* byte(s)" : {
"comment" : "Counter for Advanced Character Count",
"localizations" : {
"cs" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* bajt"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* bajtů"
}
}
}
}
},
"de" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* Byte"
}
}
}
}
},
"en" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* byte"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* bytes"
}
}
}
}
},
"en-GB" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* byte"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* bytes"
}
}
}
}
},
"es" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* octeto"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* octetos"
}
},
"zero" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* octeto"
}
}
}
}
},
"fr" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* octet"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* octets"
}
},
"zero" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* octet"
}
}
}
}
},
"it" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* byte"
}
}
}
}
},
"ja" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld*バイト"
}
}
}
}
},
"pt" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* byte"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* bytes"
}
}
}
}
},
"tr" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* bayt"
}
}
}
}
},
"zh-Hans" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld*字节"
}
}
}
}
},
"zh-Hant" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* byte"
}
}
}
}
}
}
},
"*%lld* character(s)" : {
"comment" : "Counter for Advanced Character Count",
"localizations" : {
"cs" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* znak"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* znaků"
}
}
}
}
},
"de" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* Zeichen"
}
}
}
}
},
"en" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* character"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* characters"
}
}
}
}
},
"en-GB" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* character"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* characters"
}
}
}
}
},
"es" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* carácter"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* caracteres"
}
}
}
}
},
"fr" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* caractère"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* caractères"
}
},
"zero" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* caractère"
}
}
}
}
},
"it" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* carattere"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* caratteri"
}
}
}
}
},
"ja" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld*文字"
}
}
}
}
},
"pt" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* caractere"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* caracteres"
}
}
}
}
},
"tr" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld* karakter"
}
}
}
}
},
"zh-Hans" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld*个字符"
}
}
}
}
},
"zh-Hant" : {
"variations" : {
"plural" : {
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "*%lld*個字元"
}
}
}
}
}
}
},
"%lld found" : {
"comment" : "short result message for Find All (%lld is number of found)",
"localizations" : {

View File

@ -28,7 +28,6 @@
"OK" = "OK";
"Cancel" = "Cancelar";
"Done" = "OK";
"Start" = "Iniciar";
"Restore Defaults" = "Restaurar Padrões";
"Delete" = "Apagar";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "Texto não detectado";
"Detection failed" = "Falha na detecção";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Contagem avançada de caracteres…";
"Stop Advanced Character Count" = "Parar Contagem Avançada de Caracteres";
// error message when counting failed
"failed" = "falhou";
// tooltip
"Show options" = "Mostrar opções";
// context menu item labels
"Copy" = "Copiar";
"Stop Count" = "Parar Contagem"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Espaços em branco:";
"Ignore line endings" = "Ignorar finais de linha";
"Ignore whitespace" = "Ignorar espaços em branco";
"Treat consecutive whitespace as one space" = "Tratar espaços em branco consecutivos como um espaço";
"Unit:" = "Unidade:";
"Grapheme cluster" = "Agrupamentos de Grapheme"; // technical term defined in Unicode
"Unicode scalar" = "Unicode escalar";
"UTF-16" = "UTF-16";
"Byte" = "Byte";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Conte da maneira intuitiva definida em Unicode. Um caractere que consiste em vários pontos de código Unicode, como emojis, é contado como um caractere.";
"Count Unicode code points. Same as counting UTF-32." = "Contar pontos de código Unicode. O mesmo que contar UTF-32.";
"Count Unicode code points but a surrogate pair as two characters." = "Conte os pontos de código Unicode, mas um par substituto como dois caracteres.";
"Count bytes of the text encoded with the specified encoding." = "Contar bytes do texto codificado com a codificação especificada.";
"Encoding:" = "Codificação:";
"Normalization:" = "Normalização:";

View File

@ -28,7 +28,6 @@
"OK" = "Tamam";
"Cancel" = "Vazgeç";
"Done" = "Bitti";
"Start" = "Başlangıç";
"Restore Defaults" = "Výchozí hodnoty";
"Delete" = "Sil";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "Algılanan metin yok";
"Detection failed" = "Algılama başarısız";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "Gelişmiş Karakter Sayımı…";
"Stop Advanced Character Count" = "Gelişmiş Karakter Sayımını Durdur";
// error message when counting failed
"failed" = "başarısız";
// tooltip
"Show options" = "Seçenekleri göster";
// context menu item labels
"Copy" = "Kopyala";
"Stop Count" = "Sayımı Durdur"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "Boşluk:";
"Ignore line endings" = "Satır sonlarını yok say";
"Ignore whitespace" = "Boşlukları yok say";
"Treat consecutive whitespace as one space" = "Ardışık boşluklara tek boşluk olarak davran";
"Unit:" = "Birim:";
"Grapheme cluster" = "Yazıbirim demeti";
"Unicode scalar" = "Unicode sayılı";
"UTF-16" = "UTF-16";
"Byte" = "Bayt";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "Unicodeda tanımlandığı üzere sezgisel olarak say. Birden çok Unicode kod noktasından oluşan bir karakter; örneğin Emojiler, bir karakter olarak sayılır.";
"Count Unicode code points. Same as counting UTF-32." = "Unicode kod noktalarını say. UTF-32 sayma ile aynıdır.";
"Count Unicode code points but a surrogate pair as two characters." = "Unicode kod noktalarını say; ancak vekil çifti iki karakter olarak say.";
"Count bytes of the text encoded with the specified encoding." = "Belirtilen kodlama ile kodlanmış metnin baytlarını say.";
"Encoding:" = "Kodlama:";
"Normalization:" = "Olağanlaştırma:";

View File

@ -28,7 +28,6 @@
"OK" = "好";
"Cancel" = "取消";
"Done" = "完成";
"Start" = "开始";
"Restore Defaults" = "恢复默认";
"Delete" = "删除";
@ -874,39 +873,3 @@
// error messages
"No text detected" = "没有检测到文本";
"Detection failed" = "检测失败";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "高级字符计数…";
"Stop Advanced Character Count" = "停止高级字符计数";
// error message when counting failed
"failed" = "失败";
// tooltip
"Show options" = "显示选项";
// context menu item labels
"Copy" = "复制";
"Stop Count" = "停止计数"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "空格:";
"Ignore line endings" = "忽略行尾";
"Ignore whitespace" = "忽略空格";
"Treat consecutive whitespace as one space" = "将连续空格视作一个空格";
"Unit:" = "单位:";
"Grapheme cluster" = "字位簇"; // technical term defined in Unicode
"Unicode scalar" = "Unicode标量";
"UTF-16" = "UTF-16";
"Byte" = "字节";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "以 Unicode 中定义的直观方式进行计数。如颜文字这样由多个Unicode码点组成的字符计数为一个字符。";
"Count Unicode code points. Same as counting UTF-32." = "计算Unicode码点同UTF-32。";
"Count Unicode code points but a surrogate pair as two characters." = "计算Unicode Unicode码点但将一个代理对计算为两个字符。";
"Count bytes of the text encoded with the specified encoding." = "计算文本按照指定编码方式后得到的字节数。";
"Encoding:" = "编码:";
"Normalization:" = "标准化:";

View File

@ -28,7 +28,6 @@
"OK" = "好";
"Cancel" = "取消";
"Done" = "完成";
"Start" = "開始";
"Restore Defaults" = "回復預設值";
"Delete" = "刪除";
@ -873,39 +872,3 @@
// error messages
"No text detected" = "沒能偵測到文字";
"Detection failed" = "偵測失敗";
/* MARK: AdvancedCharacterCounterView */
// menu labels
"Advanced Character Count…" = "進階字元統計⋯";
"Stop Advanced Character Count" = "停止進階字元統計";
// error message when counting failed
"failed" = "已失敗";
// tooltip
"Show options" = "顯示選項";
// context menu item labels
"Copy" = "複製";
"Stop Count" = "停止統計"; // This "Stop" should be translated the same as it is in the "Stop Advanced Character Count" menu label.
/* MARK: CharacterCountOptionsView */
"Whitespace:" = "空白字元:";
"Ignore line endings" = "忽略行尾";
"Ignore whitespace" = "忽略空白字元";
"Treat consecutive whitespace as one space" = "將多個空白字元視為同一個";
"Unit:" = "單位:";
"Grapheme cluster" = "書寫元素集"; // technical term defined in Unicode
"Unicode scalar" = "Unicode 純量";
"UTF-16" = "UTF-16";
"Byte" = "位元組";
"Count in the intuitive way defined in Unicode. A character consisting of multiple Unicode code points, such as emojis, is counted as one character." = "以萬國碼的直觀方式來統計文字數量。哪怕像是繪文字這樣的高萬字,也都按照單個文字來計算。";
"Count Unicode code points. Same as counting UTF-32." = "統計萬國碼碼點數量(以 UTF-32 的方式)。";
"Count Unicode code points but a surrogate pair as two characters." = "統計萬國碼碼點數量,但將代理配對分別統計成兩個碼點。";
"Count bytes of the text encoded with the specified encoding." = "以文本自身的編碼、來統計該文本的位元組數量。";
"Encoding:" = "編碼:";
"Normalization:" = "標準化:";