diff --git a/Scribe.xcodeproj/project.pbxproj b/Scribe.xcodeproj/project.pbxproj index 278d70b1..cdfae709 100644 --- a/Scribe.xcodeproj/project.pbxproj +++ b/Scribe.xcodeproj/project.pbxproj @@ -951,6 +951,7 @@ E9FAC3A02E98972D008E00AC /* IDCommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC3882E9894F9008E00AC /* IDCommandVariables.swift */; }; E9FAC3A12E98972D008E00AC /* IDKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FAC38A2E9894F9008E00AC /* IDKeyboardViewController.swift */; }; E9FAC3A72E989A84008E00AC /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = E9FAC3A62E989A84008E00AC /* SwiftyJSON */; }; + E9FEE6CB2EF14351003A9266 /* WrapperCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FEE6CA2EF1433E003A9266 /* WrapperCell.swift */; }; ED2486F32B0B4E8C0038AE6A /* AboutTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2486F12B0B4E8C0038AE6A /* AboutTableViewCell.swift */; }; ED2486F42B0B4E8C0038AE6A /* AboutTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = ED2486F22B0B4E8C0038AE6A /* AboutTableViewCell.xib */; }; EDB460212B03B3E400BEA967 /* BaseTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB460202B03B3E400BEA967 /* BaseTableViewController.swift */; }; @@ -1246,6 +1247,7 @@ E9FAC3932E989712008E00AC /* Indonesian.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Indonesian.appex; sourceTree = BUILT_PRODUCTS_DIR; }; E9FAC3A42E9898B5008E00AC /* GRDB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GRDB.swift; path = "/Users/purnamadev/Library/Developer/Xcode/DerivedData/Scribe-dbrvuamymhbpcmeozftkkqqvrdof/SourcePackages/checkouts/GRDB.swift"; sourceTree = ""; }; E9FAC3A52E9898B9008E00AC /* GRDB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GRDB.swift; path = "/Users/purnamadev/Library/Developer/Xcode/DerivedData/Scribe-dbrvuamymhbpcmeozftkkqqvrdof/SourcePackages/checkouts/GRDB.swift"; sourceTree = ""; }; + E9FEE6CA2EF1433E003A9266 /* WrapperCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WrapperCell.swift; sourceTree = ""; }; ED2486F12B0B4E8C0038AE6A /* AboutTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutTableViewCell.swift; sourceTree = ""; }; ED2486F22B0B4E8C0038AE6A /* AboutTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AboutTableViewCell.xib; sourceTree = ""; }; EDB460202B03B3E400BEA967 /* BaseTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTableViewController.swift; sourceTree = ""; }; @@ -1385,6 +1387,7 @@ 1406B7852A2DFCBE001DF45B /* InfoChildTableViewCell */ = { isa = PBXGroup; children = ( + E9FEE6CA2EF1433E003A9266 /* WrapperCell.swift */, 147797AE2A2CD3370044A53E /* InfoChildTableViewCell.swift */, 147797AF2A2CD3370044A53E /* InfoChildTableViewCell.xib */, ); @@ -2651,6 +2654,7 @@ D1CDED832A85A12C00098546 /* NBCommandVariables.swift in Sources */, D171944927AEF7290038660B /* KeyboardKeys.swift in Sources */, 147797B32A2CD5AB0044A53E /* ParentTableCellModel.swift in Sources */, + E9FEE6CB2EF14351003A9266 /* WrapperCell.swift in Sources */, 1401589B2A45A07200D14E52 /* WikimediaAndScribe.swift in Sources */, 3045396B293B9DC9003AE55B /* ToolTipViewDatasourceable.swift in Sources */, D1B071A027C6A1AA00FD7DBD /* KeyAltChars.swift in Sources */, diff --git a/Scribe/AboutTab/AboutViewController.swift b/Scribe/AboutTab/AboutViewController.swift index 8546b6f5..04b40c98 100644 --- a/Scribe/AboutTab/AboutViewController.swift +++ b/Scribe/AboutTab/AboutViewController.swift @@ -22,12 +22,17 @@ final class AboutViewController: BaseTableViewController { private var tipHostingController: UIHostingController! private var tableViewOffset: CGFloat? + private let cornerRadius: CGFloat = 12 override func viewDidLoad() { super.viewDidLoad() showTipCardView() title = NSLocalizedString("app.about.title", value: "About", comment: "") + tableView.register(WrapperCell.self, + forCellReuseIdentifier: WrapperCell.reuseIdentifier + ) + tableView.register( UINib(nibName: "AboutTableViewCell", bundle: nil), forCellReuseIdentifier: AboutTableViewCell.reuseIdentifier @@ -48,21 +53,36 @@ final class AboutViewController: BaseTableViewController { extension AboutViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell( - withIdentifier: AboutTableViewCell.reuseIdentifier, + withIdentifier: WrapperCell.reuseIdentifier, for: indexPath - ) as? AboutTableViewCell else { - fatalError("Failed to dequeue AboutTableViewCell.") + ) as? WrapperCell else { + fatalError("Failed to dequeue WrapperCell") } - cell.configureCell(for: dataSet[indexPath.section].section[indexPath.row]) - cell.backgroundColor = lightWhiteDarkBlackColor + + let section = dataSet[indexPath.section] + let setting = section.section[indexPath.row] + + cell.configure(withCellNamed: "AboutTableViewCell", section: setting) + + let isFirstRow = indexPath.row == 0 + let isLastRow = indexPath.row == section.section.count - 1 + WrapperCell.applyCornerRadius(to: cell, isFirst: isFirstRow, isLast: isLastRow) return cell - } +} } // MARK: UITableViewDelegate extension AboutViewController { + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + let section = dataSet[indexPath.section] + let setting = section.section[indexPath.row] + + let hasDescription = setting.shortDescription != nil + return hasDescription ? 80.0 : 48.0 + } + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let tableSection = dataSet[indexPath.section] let section = tableSection.section[indexPath.row] diff --git a/Scribe/SettingsTab/SettingsViewController.swift b/Scribe/SettingsTab/SettingsViewController.swift index c5edf4f6..8abc4b80 100644 --- a/Scribe/SettingsTab/SettingsViewController.swift +++ b/Scribe/SettingsTab/SettingsViewController.swift @@ -12,6 +12,7 @@ final class SettingsViewController: UIViewController { private var sectionHeaderHeight: CGFloat = 0 private let separatorInset = UIEdgeInsets(top: 16.0, left: 16.0, bottom: 16.0, right: 16.0) + private let cornerRadius: CGFloat = 12 private let settingsTipCardState: Bool = { let userDefault = UserDefaults.standard @@ -45,6 +46,11 @@ final class SettingsViewController: UIViewController { title = NSLocalizedString("app.settings.title", value: "Settings", comment: "") navigationItem.backButtonTitle = title + parentTable.register( + WrapperCell.self, + forCellReuseIdentifier: WrapperCell.reuseIdentifier + ) + parentTable.register( UINib(nibName: "InfoChildTableViewCell", bundle: nil), forCellReuseIdentifier: InfoChildTableViewCell.reuseIdentifier @@ -121,17 +127,20 @@ extension SettingsViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell( - withIdentifier: InfoChildTableViewCell.reuseIdentifier, + withIdentifier: WrapperCell.reuseIdentifier, for: indexPath - ) as? InfoChildTableViewCell else { - fatalError("Failed to dequeue InfoChildTableViewCell") + ) as? WrapperCell else { + fatalError("Failed to dequeue WrapperCell") } let section = tableData[indexPath.section] let setting = section.section[indexPath.row] - cell.configureCell(for: setting) - cell.backgroundColor = lightWhiteDarkBlackColor + cell.configure(withCellNamed: "InfoChildTableViewCell", section: setting) + + let isFirstRow = indexPath.row == 0 + let isLastRow = indexPath.row == section.section.count - 1 + WrapperCell.applyCornerRadius(to: cell, isFirst: isFirstRow, isLast: isLastRow) return cell } diff --git a/Scribe/Views/Cells/InfoChildTableViewCell/WrapperCell.swift b/Scribe/Views/Cells/InfoChildTableViewCell/WrapperCell.swift new file mode 100644 index 00000000..66f1c201 --- /dev/null +++ b/Scribe/Views/Cells/InfoChildTableViewCell/WrapperCell.swift @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +import UIKit + +protocol RoundableCell { + func applyCornerRadius(corners: CACornerMask, radius: CGFloat) + func removeCornerRadius() +} +/// Generic wrapper cell that can wrap any UITableViewCell with padding and corner radius support +class WrapperCell: UITableViewCell { + static let reuseIdentifier = "WrapperCell" + + private let containerView = UIView() + private(set) var wrappedCell: UITableViewCell? + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setupViews() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupViews() { + backgroundColor = .clear + contentView.backgroundColor = .clear + selectionStyle = .none + + containerView.translatesAutoresizingMaskIntoConstraints = false + containerView.backgroundColor = lightWhiteDarkBlackColor + contentView.addSubview(containerView) + + NSLayoutConstraint.activate([ + containerView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), + containerView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16), + containerView.topAnchor.constraint(equalTo: contentView.topAnchor), + containerView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) + ]) + } + + /// Configure with any cell loaded from XIB + func configure(withCellNamed nibName: String, section: Section) { + wrappedCell?.removeFromSuperview() + + guard let cell = Bundle.main.loadNibNamed( + nibName, + owner: nil, + options: nil + )?.first as? UITableViewCell else { + fatalError("Failed to load \(nibName) from XIB") + } + + if let infoCell = cell as? InfoChildTableViewCell { + infoCell.configureCell(for: section) + } else if let aboutCell = cell as? AboutTableViewCell { + aboutCell.configureCell(for: section) + } + + cell.backgroundColor = .clear + cell.translatesAutoresizingMaskIntoConstraints = false + + containerView.addSubview(cell) + + NSLayoutConstraint.activate([ + cell.leadingAnchor.constraint(equalTo: containerView.leadingAnchor), + cell.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), + cell.topAnchor.constraint(equalTo: containerView.topAnchor), + cell.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) + ]) + + wrappedCell = cell + } + + func applyCornerRadius(corners: CACornerMask, radius: CGFloat) { + containerView.layer.maskedCorners = corners + containerView.layer.cornerRadius = radius + containerView.layer.masksToBounds = true + } + + func removeCornerRadius() { + containerView.layer.cornerRadius = 0 + containerView.layer.masksToBounds = false + } + + // MARK: - Static Helper + + /// Apply corner radius to a cell based on its position in the section + static func applyCornerRadius( + to cell: UITableViewCell, + isFirst: Bool, + isLast: Bool, + radius: CGFloat = 12 + ) { + guard let roundableCell = cell as? RoundableCell else { return } + + if isFirst && isLast { + roundableCell.applyCornerRadius( + corners: [.layerMinXMinYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMaxXMaxYCorner], + radius: radius + ) + } else if isFirst { + roundableCell.applyCornerRadius( + corners: [.layerMinXMinYCorner, .layerMaxXMinYCorner], + radius: radius + ) + } else if isLast { + roundableCell.applyCornerRadius( + corners: [.layerMinXMaxYCorner, .layerMaxXMaxYCorner], + radius: radius + ) + } else { + roundableCell.removeCornerRadius() + } + } +} + +extension WrapperCell: RoundableCell {} diff --git a/Scribe/Views/TableViewTemplateViewController.swift b/Scribe/Views/TableViewTemplateViewController.swift index 4510a19e..501cfdae 100644 --- a/Scribe/Views/TableViewTemplateViewController.swift +++ b/Scribe/Views/TableViewTemplateViewController.swift @@ -15,6 +15,7 @@ final class TableViewTemplateViewController: BaseTableViewController { private var tableData: [ParentTableCellModel] = [] private var parentSection: Section? + private let cornerRadius: CGFloat = 12 let userDefaults = UserDefaults(suiteName: "group.be.scri.userDefaultsContainer")! @@ -35,6 +36,11 @@ final class TableViewTemplateViewController: BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() + tableView.register( + WrapperCell.self, + forCellReuseIdentifier: WrapperCell.reuseIdentifier + ) + tableView.rowHeight = UITableView.automaticDimension tableView.estimatedRowHeight = 250 tableView.separatorStyle = .none @@ -49,10 +55,23 @@ final class TableViewTemplateViewController: BaseTableViewController { // Refreshes to check for changes when a translation language is selected override func viewWillAppear(_ animated: Bool) { - for cell in tableView.visibleCells as! [InfoChildTableViewCell] where cell.section?.sectionState == .translateLang { + super.viewWillAppear(animated) + + for visibleCell in tableView.visibleCells { + // Cast to wrapper cell first + guard let wrapperCell = visibleCell as? WrapperCell, + let innerCell = wrapperCell.wrappedCell as? InfoChildTableViewCell else { // Cast to specific type + continue + } + + // Now check if it's a translate lang section + guard innerCell.section?.sectionState == .translateLang else { + continue + } + let langTranslateLanguage = getKeyInDict(givenValue: (userDefaults.string(forKey: langCode + "TranslateLanguage") ?? "en"), dict: languagesAbbrDict) let currentLang = "app._global." + langTranslateLanguage.lowercased() - cell.subLabel.text = NSLocalizedString(currentLang, value: langTranslateLanguage, comment: "") + innerCell.subLabel.text = NSLocalizedString(currentLang, value: langTranslateLanguage, comment: "") } } } @@ -62,17 +81,32 @@ final class TableViewTemplateViewController: BaseTableViewController { extension TableViewTemplateViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell( - withIdentifier: InfoChildTableViewCell.reuseIdentifier, + withIdentifier: WrapperCell.reuseIdentifier, for: indexPath - ) as? InfoChildTableViewCell else { - fatalError("Failed to dequeue InfoChildTableViewCell.") + ) as? WrapperCell else { + fatalError("Failed to dequeue WrapperCell") } - cell.parentSection = parentSection - cell.configureCell(for: tableData[indexPath.section].section[indexPath.row]) - cell.backgroundColor = lightWhiteDarkBlackColor + + let section = dataSet[indexPath.section] + let setting = section.section[indexPath.row] + + cell.configure(withCellNamed: "InfoChildTableViewCell", section: setting) + + let isFirstRow = indexPath.row == 0 + let isLastRow = indexPath.row == section.section.count - 1 + WrapperCell.applyCornerRadius(to: cell, isFirst: isFirstRow, isLast: isLastRow) return cell - } +} + + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + let section = tableData[indexPath.section] + let setting = section.section[indexPath.row] + + // If has description, give it more height + let hasDescription = setting.shortDescription != nil + return hasDescription ? 100.0 : 60.0 + } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let tableSection = tableData[indexPath.section] diff --git a/Scribe/i18n/Scribe-i18n/Localizable.xcstrings b/Scribe/i18n/Scribe-i18n/Localizable.xcstrings index 732e7011..ca60b6ad 100644 --- a/Scribe/i18n/Scribe-i18n/Localizable.xcstrings +++ b/Scribe/i18n/Scribe-i18n/Localizable.xcstrings @@ -250,6 +250,17 @@ } } }, + "app._global.indonesian" : { + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Indonesian" + } + } + } + }, "app._global.italian" : { "comment" : "", "localizations" : { @@ -333,6 +344,17 @@ } } }, + "app._global.norwegian" : { + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Norwegian" + } + } + } + }, "app._global.portuguese" : { "comment" : "", "localizations" : { @@ -999,6 +1021,7 @@ }, "app.about.community.share_conjugate" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -1995,6 +2018,7 @@ }, "app.about.feedback.rate_conjugate" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -2574,6 +2598,17 @@ } } }, + "app.about.legal.third_legal.entry_simple_keyboard" : { + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Simple Keyboard\n• Author: Simple Mobile Tools\n• License: GPL-3.0\n• Link: https://github.com/SimpleMobileTools/Simple-Keyboard/blob/main/LICENSE" + } + } + } + }, "app.about.legal.third_party" : { "comment" : "", "localizations" : { @@ -2825,6 +2860,7 @@ }, "app.about.legal.third_party.entry_simple_keyboard" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3157,6 +3193,7 @@ }, "app.conjugate.choose_conjugation.select_tense" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3240,6 +3277,7 @@ }, "app.conjugate.choose_conjugation.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3323,6 +3361,7 @@ }, "app.conjugate.recently_conjugated.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3406,6 +3445,7 @@ }, "app.conjugate.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3489,6 +3529,7 @@ }, "app.conjugate.verbs_search.placeholder" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3572,6 +3613,7 @@ }, "app.conjugate.verbs_search.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3655,6 +3697,7 @@ }, "app.download.menu_option.conjugate_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3738,6 +3781,7 @@ }, "app.download.menu_option.conjugate_download_data" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3821,6 +3865,7 @@ }, "app.download.menu_option.conjugate_download_data_start" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3904,6 +3949,7 @@ }, "app.download.menu_option.conjugate_title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3987,6 +4033,7 @@ }, "app.download.menu_option.scribe_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4070,6 +4117,7 @@ }, "app.download.menu_option.scribe_download_data" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4153,6 +4201,7 @@ }, "app.download.menu_option.scribe_title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4236,6 +4285,7 @@ }, "app.download.menu_ui.select.all_languages" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4319,6 +4369,7 @@ }, "app.download.menu_ui.select.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4402,6 +4453,7 @@ }, "app.download.menu_ui.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4485,6 +4537,7 @@ }, "app.download.menu_ui.update_data.check_new" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4568,6 +4621,7 @@ }, "app.download.menu_ui.update_data.regular_update" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4651,6 +4705,7 @@ }, "app.download.menu_ui.update_data.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4817,6 +4872,7 @@ }, "app.installation.button_quick_tutorial" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4900,6 +4956,7 @@ }, "app.installation.keyboard.keyboard_settings" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5730,6 +5787,7 @@ }, "app.settings.button_install_keyboards" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5813,6 +5871,7 @@ }, "app.settings.keyboard.functionality.annotate_suggestions" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5896,6 +5955,7 @@ }, "app.settings.keyboard.functionality.annotate_suggestions_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6145,6 +6205,7 @@ }, "app.settings.keyboard.functionality.default_emoji_tone" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6226,174 +6287,177 @@ } } }, - "app.settings.keyboard.functionality.default_emoji_tone.caption" : { + "app.settings.keyboard.functionality.default_emoji_tone_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لون البشرة المستخدم" + "value" : "حدد لون البشرة الافتراضي لاقتراحات واكتملات الرموز التعبيرية." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "ব্যবহার করা স্কিন টোন" + "value" : "ইমোজি প্রস্তাবনা এবং পূর্ণকরণের জন্য একটি ডিফল্ট স্কিন টোন সেট করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Die zu benutzende Hautfarbe" + "value" : "Stelle einen Standardhautton für automatische Emoji-Vorschläge ein." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Skin tone to be used" + "value" : "Set a default skin tone for emoji autosuggestions and completions." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Color de piel a utilizar" + "value" : "Establece un tono de piel predeterminado para las autosugerencias y los complementos emoji." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Couleur de peau à utiliser" + "value" : "Définir la couleur de peau par défaut pour les suggestions automatiques et les complétions des émojis." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "उपयोग होने वाला त्वचा का रंग" + "value" : "इमोजी सुझाव और समाप्ति के लिए एक डिफ़ॉल्ट त्वचा रंग सेट करें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Warna kulit yang digunakan" + "value" : "Atur warna kulit default untuk saran otomatis dan pelengkapan emoji." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "사용할 피부 톤" + "value" : "이모지 자동 추천 및 완성을 위한 피부 톤의 기본값을 설정합니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "वापरल्या जाणाऱ्या त्वचेचा रंग" + "value" : "इमोजीच्या सुचवण्या आणि समाप्ति साठी डिफॉल्ट त्वचा रंग सेट करा." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Tom de pele a ser usado" + "value" : "Defina um tom de pele padrão para as sugestões de emoji." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Hudton som ska användas" + "value" : "Välj en standard-hudton för automatiska förslag och komplettering gällande emojis." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Kullanılacak cilt tonu" + "value" : "Emoji önerileri ve otomatik tamamlama için varsayılan cilt tonunu ayarlayın." } } } }, - "app.settings.keyboard.functionality.default_emoji_tone_description" : { + "app.settings.keyboard.functionality.default_emoji_tone.caption" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "حدد لون البشرة الافتراضي لاقتراحات واكتملات الرموز التعبيرية." + "value" : "لون البشرة المستخدم" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "ইমোজি প্রস্তাবনা এবং পূর্ণকরণের জন্য একটি ডিফল্ট স্কিন টোন সেট করুন।" + "value" : "ব্যবহার করা স্কিন টোন" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Stelle einen Standardhautton für automatische Emoji-Vorschläge ein." + "value" : "Die zu benutzende Hautfarbe" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Set a default skin tone for emoji autosuggestions and completions." + "value" : "Skin tone to be used" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Establece un tono de piel predeterminado para las autosugerencias y los complementos emoji." + "value" : "Color de piel a utilizar" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Définir la couleur de peau par défaut pour les suggestions automatiques et les complétions des émojis." + "value" : "Couleur de peau à utiliser" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "इमोजी सुझाव और समाप्ति के लिए एक डिफ़ॉल्ट त्वचा रंग सेट करें।" + "value" : "उपयोग होने वाला त्वचा का रंग" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Atur warna kulit default untuk saran otomatis dan pelengkapan emoji." + "value" : "Warna kulit yang digunakan" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "이모지 자동 추천 및 완성을 위한 피부 톤의 기본값을 설정합니다." + "value" : "사용할 피부 톤" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "इमोजीच्या सुचवण्या आणि समाप्ति साठी डिफॉल्ट त्वचा रंग सेट करा." + "value" : "वापरल्या जाणाऱ्या त्वचेचा रंग" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Defina um tom de pele padrão para as sugestões de emoji." + "value" : "Tom de pele a ser usado" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj en standard-hudton för automatiska förslag och komplettering gällande emojis." + "value" : "Hudton som ska användas" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Emoji önerileri ve otomatik tamamlama için varsayılan cilt tonunu ayarlayın." + "value" : "Kullanılacak cilt tonu" } } } }, "app.settings.keyboard.functionality.delete_word_by_word" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6477,6 +6541,7 @@ }, "app.settings.keyboard.functionality.delete_word_by_word_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6726,6 +6791,7 @@ }, "app.settings.keyboard.functionality.hold_for_alt_chars" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6809,6 +6875,7 @@ }, "app.settings.keyboard.functionality.hold_for_alt_chars_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6892,6 +6959,7 @@ }, "app.settings.keyboard.functionality.popup_on_keypress" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6975,6 +7043,7 @@ }, "app.settings.keyboard.functionality.popup_on_keypress_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7058,6 +7127,7 @@ }, "app.settings.keyboard.functionality.punctuation_spacing" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7141,6 +7211,7 @@ }, "app.settings.keyboard.functionality.punctuation_spacing_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7307,6 +7378,7 @@ }, "app.settings.keyboard.keypress_sound" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -7318,6 +7390,7 @@ }, "app.settings.keyboard.keypress_sound_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -7329,6 +7402,7 @@ }, "app.settings.keyboard.keypress_vibration" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7412,6 +7486,7 @@ }, "app.settings.keyboard.keypress_vibration_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7495,6 +7570,7 @@ }, "app.settings.keyboard.layout.default_currency" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7576,174 +7652,177 @@ } } }, - "app.settings.keyboard.layout.default_currency.caption" : { + "app.settings.keyboard.layout.default_currency_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "رمز لمفاتيح 123" + "value" : "اختر أي رمز للعملة يظهر على مفاتيح الأرقام." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "১২৩ কীগুলির জন্য প্রতীক" + "value" : "সংখ্যার কীগুলিতে কোন মুদ্রা প্রতীক প্রদর্শিত হবে তা নির্বাচন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Symbol für Nummerntasten" + "value" : "Auswählen, welches Währungssymbol bei den Nummerntasten auftaucht." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Symbol for the 123 keys" + "value" : "Select which currency symbol appears on the number keys." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Símbolo para las teclas 123" + "value" : "Seleccione el símbolo de moneda que aparecerá en las teclas numéricas." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Symbole pour les touches 123" + "value" : "Sélectionner le symbole de la devise qui apparaît sur les touches numériques." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "123 कुंजियों के लिए प्रतीक" + "value" : "संख्या कुंजियों पर कौन सा मुद्रा प्रतीक दिखाई देगा, उसका चयन करें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Simbol untuk tombol 123" + "value" : "Pilih simbol mata uang yang ingin ditampilkan di tombol angka." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "숫자 키 기호" + "value" : "숫자 키에 어떤 통화 기호가 표시될지를 선택하세요." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "123 किजसाठी चिन्ह" + "value" : "संक्येत कुञ्जींवर कोणते चलन चिन्ह दिसेल ते निवडा." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Símbolo para as teclas 123" + "value" : "Selecione qual símbolo de moeda aparecerá nas teclas de número." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Symbol för 123-tangenter" + "value" : "Välj vilken valutasymbol som ska visas på sifferknapparna." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "123 tuşları için sembol" + "value" : "Sayı tuşlarında hangi para biriminin görüneceğini seçin." } } } }, - "app.settings.keyboard.layout.default_currency_description" : { + "app.settings.keyboard.layout.default_currency.caption" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "اختر أي رمز للعملة يظهر على مفاتيح الأرقام." + "value" : "رمز لمفاتيح 123" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "সংখ্যার কীগুলিতে কোন মুদ্রা প্রতীক প্রদর্শিত হবে তা নির্বাচন করুন।" + "value" : "১২৩ কীগুলির জন্য প্রতীক" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Auswählen, welches Währungssymbol bei den Nummerntasten auftaucht." + "value" : "Symbol für Nummerntasten" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Select which currency symbol appears on the number keys." + "value" : "Symbol for the 123 keys" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Seleccione el símbolo de moneda que aparecerá en las teclas numéricas." + "value" : "Símbolo para las teclas 123" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Sélectionner le symbole de la devise qui apparaît sur les touches numériques." + "value" : "Symbole pour les touches 123" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "संख्या कुंजियों पर कौन सा मुद्रा प्रतीक दिखाई देगा, उसका चयन करें।" + "value" : "123 कुंजियों के लिए प्रतीक" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Pilih simbol mata uang yang ingin ditampilkan di tombol angka." + "value" : "Simbol untuk tombol 123" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "숫자 키에 어떤 통화 기호가 표시될지를 선택하세요." + "value" : "숫자 키 기호" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "संक्येत कुञ्जींवर कोणते चलन चिन्ह दिसेल ते निवडा." + "value" : "123 किजसाठी चिन्ह" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Selecione qual símbolo de moeda aparecerá nas teclas de número." + "value" : "Símbolo para as teclas 123" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj vilken valutasymbol som ska visas på sifferknapparna." + "value" : "Symbol för 123-tangenter" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Sayı tuşlarında hangi para biriminin görüneceğini seçin." + "value" : "123 tuşları için sembol" } } } }, "app.settings.keyboard.layout.default_layout" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7825,168 +7904,170 @@ } } }, - "app.settings.keyboard.layout.default_layout.caption" : { + "app.settings.keyboard.layout.default_layout_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "التخطيط المستخدم" + "value" : "اختر تخطيط لوحة مفاتيح يناسب تفضيلات الكتابة واحتياجات اللغة الخاصة بك." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "ব্যবহার করার জন্য লেআউট" + "value" : "আপনার টাইপিং পছন্দ এবং ভাষার প্রয়োজন অনুযায়ী কীবোর্ড বিন্যাস নির্বাচন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Zu benutzendes Layout" + "value" : "Ein Tastaturlayout auswählen, das den eigenen Vorlieben und der Sprache entspricht." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Layout to use" + "value" : "Select a keyboard layout that suits your typing preference and language needs." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Disposición de uso" + "value" : "Selecciona una distribución para el teclado que se adapta a tus preferencias de escritura y a tus necesidades lingüísticas." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Disposition à utiliser" + "value" : "Sélectionnez une disposition de clavier adaptée à vos préférences de frappe et à vos besoins linguistiques." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "उपयोग होने वाला लेआउट" + "value" : "एक कीबोर्ड लेआउट चुनें जो आपके टाइपिंग प्राथमिकता और भाषा आवश्यकताओं के अनुसार हो।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Layout yang digunakan" + "value" : "Pilih layout keyboard sesuai preferensi mengetik dan kebutuhan bahasamu." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "적용할 레이아웃" + "value" : "선호도와 언어 필요에 맞는 키보드 레이아웃을 선택하세요." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "वापरले जाणारे लेआउट" + "value" : "तुमच्या टाइपिंग आवडीनुसार आणि भाषा गरजेनुसार कीबोर्ड लेआउट निवडा." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Layout a ser usado" + "value" : "Selecione um layout de teclado conforme suas preferências de digitação e idioma." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Layout som ska användas" + "value" : "Välj en tangentbordslayout som passar dina skrivpreferenser och språkbehov." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Kullanılacak klavye düzeni" + "value" : "Yazma tercihlerinize ve dil ihtiyaçlarınıza uygun bir klavye düzeni seçin." } } } }, - "app.settings.keyboard.layout.default_layout_description" : { + "app.settings.keyboard.layout.default_layout.caption" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "اختر تخطيط لوحة مفاتيح يناسب تفضيلات الكتابة واحتياجات اللغة الخاصة بك." + "value" : "التخطيط المستخدم" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "আপনার টাইপিং পছন্দ এবং ভাষার প্রয়োজন অনুযায়ী কীবোর্ড বিন্যাস নির্বাচন করুন।" + "value" : "ব্যবহার করার জন্য লেআউট" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Ein Tastaturlayout auswählen, das den eigenen Vorlieben und der Sprache entspricht." + "value" : "Zu benutzendes Layout" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Select a keyboard layout that suits your typing preference and language needs." + "value" : "Layout to use" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Selecciona una distribución para el teclado que se adapta a tus preferencias de escritura y a tus necesidades lingüísticas." + "value" : "Disposición de uso" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Sélectionnez une disposition de clavier adaptée à vos préférences de frappe et à vos besoins linguistiques." + "value" : "Disposition à utiliser" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "एक कीबोर्ड लेआउट चुनें जो आपके टाइपिंग प्राथमिकता और भाषा आवश्यकताओं के अनुसार हो।" + "value" : "उपयोग होने वाला लेआउट" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Pilih layout keyboard sesuai preferensi mengetik dan kebutuhan bahasamu." + "value" : "Layout yang digunakan" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "선호도와 언어 필요에 맞는 키보드 레이아웃을 선택하세요." + "value" : "적용할 레이아웃" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "तुमच्या टाइपिंग आवडीनुसार आणि भाषा गरजेनुसार कीबोर्ड लेआउट निवडा." + "value" : "वापरले जाणारे लेआउट" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Selecione um layout de teclado conforme suas preferências de digitação e idioma." + "value" : "Layout a ser usado" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj en tangentbordslayout som passar dina skrivpreferenser och språkbehov." + "value" : "Layout som ska användas" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Yazma tercihlerinize ve dil ihtiyaçlarınıza uygun bir klavye düzeni seçin." + "value" : "Kullanılacak klavye düzeni" } } } @@ -8491,6 +8572,7 @@ }, "app.settings.keyboard.translation.select_source" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -8572,257 +8654,258 @@ } } }, - "app.settings.keyboard.translation.select_source.caption" : { + "app.settings.keyboard.translation.select_source_description" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "ما هي اللغة المصدر" + "value" : "تغيير اللغة للترجمة منها." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "উৎস ভাষা কী" + "value" : "যে ভাষা থেকে অনুবাদ করা হবে তা পরিবর্তন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Die verwendete Ausgangssprache" + "value" : "Wähle die Sprache, von der übersetzt wird." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "What the source language is" + "value" : "Change the language to translate from." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "¿Cuál es idioma de origen?" + "value" : "Elige un idioma para traducir" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Langue source" + "value" : "Modifier la langue à partir de laquelle la traduction doit être effectuée." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "स्रोत भाषा क्या है" + "value" : "जिस भाषा से अनुवाद करना है, उसे बदलें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Apa bahasa asalnya" + "value" : "Ubah bahasa untuk diterjemahkan dari." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "원본 언어는 무엇인가요" + "value" : "번역할 언어를 변경하세요." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "स्रोत भाषा काय आहे" + "value" : "अनुवाद करायची भाषा बदला." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "O idioma de origem" + "value" : "Altere o idioma a ser traduzido." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Vilket är källspråket" + "value" : "Välj ett språk att översätta ifrån" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Kaynak dil nedir" + "value" : "Çevrilecek dili değiştirin." } } } }, - "app.settings.keyboard.translation.select_source.title" : { + "app.settings.keyboard.translation.select_source.caption" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لغة الترجمة" + "value" : "ما هي اللغة المصدر" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "অনুবাদ ভাষা" + "value" : "উৎস ভাষা কী" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Übersetzungssprache" + "value" : "Die verwendete Ausgangssprache" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Translation language" + "value" : "What the source language is" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Idioma de la traducción" + "value" : "¿Cuál es idioma de origen?" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Langue de traduction" + "value" : "Langue source" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "अनुवाद भाषा" + "value" : "स्रोत भाषा क्या है" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Bahasa terjemahan" + "value" : "Apa bahasa asalnya" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "번역 언어" + "value" : "원본 언어는 무엇인가요" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "अनुवाद भाषा" + "value" : "स्रोत भाषा काय आहे" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Idioma da tradução" + "value" : "O idioma de origem" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Språk för översättning" + "value" : "Vilket är källspråket" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Çeviri dili" + "value" : "Kaynak dil nedir" } } } }, - "app.settings.keyboard.translation.select_source_description" : { + "app.settings.keyboard.translation.select_source.title" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "تغيير اللغة للترجمة منها." + "value" : "لغة الترجمة" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "যে ভাষা থেকে অনুবাদ করা হবে তা পরিবর্তন করুন।" + "value" : "অনুবাদ ভাষা" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Wähle die Sprache, von der übersetzt wird." + "value" : "Übersetzungssprache" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Change the language to translate from." + "value" : "Translation language" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Elige un idioma para traducir" + "value" : "Idioma de la traducción" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Modifier la langue à partir de laquelle la traduction doit être effectuée." + "value" : "Langue de traduction" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "जिस भाषा से अनुवाद करना है, उसे बदलें।" + "value" : "अनुवाद भाषा" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Ubah bahasa untuk diterjemahkan dari." + "value" : "Bahasa terjemahan" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "번역할 언어를 변경하세요." + "value" : "번역 언어" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "अनुवाद करायची भाषा बदला." + "value" : "अनुवाद भाषा" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Altere o idioma a ser traduzido." + "value" : "Idioma da tradução" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj ett språk att översätta ifrån" + "value" : "Språk för översättning" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Çevrilecek dili değiştirin." + "value" : "Çeviri dili" } } } }, "app.settings.keyboard.translation.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -8906,6 +8989,7 @@ }, "app.settings.menu.app_color_mode" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -8989,6 +9073,7 @@ }, "app.settings.menu.app_color_mode_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9153,340 +9238,344 @@ } } }, - "app.settings.menu.app_language.caption" : { + "app.settings.menu.app_language_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "اختر لغة لنصوص التطبيق" + "value" : "تغيير اللغة التي يتم بها عرض تطبيق Scribe." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "অ্যাপের টেক্সটগুলির জন্য ভাষা নির্বাচন করুন" + "value" : "Scribe অ্যাপ কোন ভাষায় থাকবে তা পরিবর্তন করুন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "App-Sprache auswählen" + "value" : "Ändern, welche Sprache für die Scribe-App benutzt wird." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Select language for app texts" + "value" : "Change which language the Scribe app is in." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Selecciona el idioma de los textos de la aplicación" + "value" : "Cambiar el idioma de la aplicación Scribe." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Sélectionner la langue des textes de l'application" + "value" : "Modifier la langue de l'application Scribe." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "ऐप टेक्स्ट के लिए भाषा चुनें" + "value" : "स्क्राइब ऐप किस भाषा में होगा, उसे बदलें।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Pilih bahasa untuk tampilan teks aplikasi. " + "value" : "Ubah bahasa yang digunakan pada aplikasi Scribe" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "앱에서 사용할 언어 선택" + "value" : "Scribe 앱에서 사용할 언어를 변경합니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "अ‍ॅप टेक्स्टसाठी भाषा निवडा" + "value" : "स्क्राइब अ‍ॅप कोणत्या भाषेत असेल ते बदला." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Selecione o idioma para os textos do aplicativo" + "value" : "Altere o idioma do aplicativo Scribe." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Välj språk för apptexter" + "value" : "Ändra vilket språk Scribe-appen är på." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Uygulama metinleri için dil seçin" + "value" : "Scribe uygulamasının hangi dilde olduğunu değiştirin." } } } }, - "app.settings.menu.app_language.one_device_language_warning.message" : { + "app.settings.menu.app_language.caption" : { "comment" : "", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لديك لغة واحدة فقط مثبتة على جهازك. يرجى تثبيت المزيد من اللغات في الإعدادات ثم يمكنك تحديد الترجمات المختلفة لتطبيق Scribe." + "value" : "اختر لغة لنصوص التطبيق" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "আপনার ডিভাইসে শুধুমাত্র একটি ভাষা ইনস্টল করা আছে। দয়া করে সেটিংসে আরও ভাষা ইনস্টল করুন, তারপর আপনি Scribe-এর বিভিন্ন localizations নির্বাচন করতে পারবেন।" + "value" : "অ্যাপের টেক্সটগুলির জন্য ভাষা নির্বাচন করুন" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Auf Ihrem Gerät ist nur eine Sprache installiert. Bitte installieren Sie weitere Sprachen in den Einstellungen. Anschließend können Sie verschiedene Lokalisierungen von Scribe auswählen." + "value" : "App-Sprache auswählen" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "You only have one language installed on your device. Please install more languages in Settings and then you can select different localizations of Scribe." + "value" : "Select language for app texts" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Solo tienes un idioma instalado en tu dispositivo. Instala más idiomas en Configuración y luego podrás seleccionar diferentes localizaciones de Scribe." + "value" : "Selecciona el idioma de los textos de la aplicación" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Une seule langue est installée sur votre appareil. Veuillez installer d'autres langues dans les Paramètres et vous pourrez alors sélectionner différentes langues de Scribe." + "value" : "Sélectionner la langue des textes de l'application" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "आपके डिवाइस पर केवल एक भाषा स्थापित है। कृपया सेटिंग्स में अधिक भाषाएँ स्थापित करें और फिर आप स्क्राइब के विभिन्न स्थानीयकरण का चयन कर सकते हैं।" + "value" : "ऐप टेक्स्ट के लिए भाषा चुनें" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Kamu hanya memiliki satu bahasa yang terpasang di perangkatmu. Silakan pasang lebih banyak bahasa di Pengaturan dan kamu akan bisa memilih lokalisasi Scribe yang berbeda." + "value" : "Pilih bahasa untuk tampilan teks aplikasi. " } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "현재 기기에 설치된 언어는 하나뿐입니다. 설정에서 추가 언어를 설치한 후 Scribe의 다양한 지역화를 선택할 수 있습니다." + "value" : "앱에서 사용할 언어 선택" } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "तुमच्या डिव्हाइसवर फक्त एक भाषा स्थापित आहे. कृपया सेटिंग्जमध्ये अधिक भाषांचे संयोजन स्थापित करा आणि नंतर तुम्ही स्क्राइबच्या वेगवेगळ्या स्थानिकीकरण निवडू शकता." + "value" : "अ‍ॅप टेक्स्टसाठी भाषा निवडा" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Você tem apenas um idioma instalado no seu dispositivo. Por favor, instale mais idiomas nas Configurações para então selecionar diferentes versões de idioma do Scribe." + "value" : "Selecione o idioma para os textos do aplicativo" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Du har bara ett språk installerat på din enhet. Installera fler språk i Inställningar och efter det kan du välja olika lokaliseringar av Scribe." + "value" : "Välj språk för apptexter" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Cihazınızda yalnızca bir dil yüklü. Ayarlardan daha fazla dil yükleyin ve ardından Scribe'ın farklı yerelleştirmelerini seçin." + "value" : "Uygulama metinleri için dil seçin" } } } }, - "app.settings.menu.app_language.one_device_language_warning.title" : { + "app.settings.menu.app_language.one_device_language_warning.message" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "لغة جهاز واحدة فقط" + "value" : "لديك لغة واحدة فقط مثبتة على جهازك. يرجى تثبيت المزيد من اللغات في الإعدادات ثم يمكنك تحديد الترجمات المختلفة لتطبيق Scribe." } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "শুধুমাত্র একটি ডিভাইসের ভাষা" + "value" : "আপনার ডিভাইসে শুধুমাত্র একটি ভাষা ইনস্টল করা আছে। দয়া করে সেটিংসে আরও ভাষা ইনস্টল করুন, তারপর আপনি Scribe-এর বিভিন্ন localizations নির্বাচন করতে পারবেন।" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Nur eine Gerätesprache" + "value" : "Auf Ihrem Gerät ist nur eine Sprache installiert. Bitte installieren Sie weitere Sprachen in den Einstellungen. Anschließend können Sie verschiedene Lokalisierungen von Scribe auswählen." } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Only one device language" + "value" : "You only have one language installed on your device. Please install more languages in Settings and then you can select different localizations of Scribe." } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Solo un idioma para el dispositivo" + "value" : "Solo tienes un idioma instalado en tu dispositivo. Instala más idiomas en Configuración y luego podrás seleccionar diferentes localizaciones de Scribe." } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Une seule langue pour l'appareil" + "value" : "Une seule langue est installée sur votre appareil. Veuillez installer d'autres langues dans les Paramètres et vous pourrez alors sélectionner différentes langues de Scribe." } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "केवल एक डिवाइस भाषा" + "value" : "आपके डिवाइस पर केवल एक भाषा स्थापित है। कृपया सेटिंग्स में अधिक भाषाएँ स्थापित करें और फिर आप स्क्राइब के विभिन्न स्थानीयकरण का चयन कर सकते हैं।" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Hanya satu bahasa perangkat" + "value" : "Kamu hanya memiliki satu bahasa yang terpasang di perangkatmu. Silakan pasang lebih banyak bahasa di Pengaturan dan kamu akan bisa memilih lokalisasi Scribe yang berbeda." } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "기기 언어가 하나뿐입니다." + "value" : "현재 기기에 설치된 언어는 하나뿐입니다. 설정에서 추가 언어를 설치한 후 Scribe의 다양한 지역화를 선택할 수 있습니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "फक्त एक डिव्हाइस भाषा" + "value" : "तुमच्या डिव्हाइसवर फक्त एक भाषा स्थापित आहे. कृपया सेटिंग्जमध्ये अधिक भाषांचे संयोजन स्थापित करा आणि नंतर तुम्ही स्क्राइबच्या वेगवेगळ्या स्थानिकीकरण निवडू शकता." } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Apenas um idioma no dispositivo" + "value" : "Você tem apenas um idioma instalado no seu dispositivo. Por favor, instale mais idiomas nas Configurações para então selecionar diferentes versões de idioma do Scribe." } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Endast ett enhetsspråk" + "value" : "Du har bara ett språk installerat på din enhet. Installera fler språk i Inställningar och efter det kan du välja olika lokaliseringar av Scribe." } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Yalnızca bir cihaz dili" + "value" : "Cihazınızda yalnızca bir dil yüklü. Ayarlardan daha fazla dil yükleyin ve ardından Scribe'ın farklı yerelleştirmelerini seçin." } } } }, - "app.settings.menu.app_language_description" : { + "app.settings.menu.app_language.one_device_language_warning.title" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "", - "value" : "تغيير اللغة التي يتم بها عرض تطبيق Scribe." + "value" : "لغة جهاز واحدة فقط" } }, "bn" : { "stringUnit" : { "state" : "", - "value" : "Scribe অ্যাপ কোন ভাষায় থাকবে তা পরিবর্তন করুন।" + "value" : "শুধুমাত্র একটি ডিভাইসের ভাষা" } }, "de" : { "stringUnit" : { "state" : "", - "value" : "Ändern, welche Sprache für die Scribe-App benutzt wird." + "value" : "Nur eine Gerätesprache" } }, "en" : { "stringUnit" : { "state" : "", - "value" : "Change which language the Scribe app is in." + "value" : "Only one device language" } }, "es" : { "stringUnit" : { "state" : "", - "value" : "Cambiar el idioma de la aplicación Scribe." + "value" : "Solo un idioma para el dispositivo" } }, "fr" : { "stringUnit" : { "state" : "", - "value" : "Modifier la langue de l'application Scribe." + "value" : "Une seule langue pour l'appareil" } }, "hi" : { "stringUnit" : { "state" : "", - "value" : "स्क्राइब ऐप किस भाषा में होगा, उसे बदलें।" + "value" : "केवल एक डिवाइस भाषा" } }, "id" : { "stringUnit" : { "state" : "", - "value" : "Ubah bahasa yang digunakan pada aplikasi Scribe" + "value" : "Hanya satu bahasa perangkat" } }, "ko" : { "stringUnit" : { "state" : "", - "value" : "Scribe 앱에서 사용할 언어를 변경합니다." + "value" : "기기 언어가 하나뿐입니다." } }, "mr" : { "stringUnit" : { "state" : "", - "value" : "स्क्राइब अ‍ॅप कोणत्या भाषेत असेल ते बदला." + "value" : "फक्त एक डिव्हाइस भाषा" } }, "pt" : { "stringUnit" : { "state" : "", - "value" : "Altere o idioma do aplicativo Scribe." + "value" : "Apenas um idioma no dispositivo" } }, "sv" : { "stringUnit" : { "state" : "", - "value" : "Ändra vilket språk Scribe-appen är på." + "value" : "Endast ett enhetsspråk" } }, "tr" : { "stringUnit" : { "state" : "", - "value" : "Scribe uygulamasının hangi dilde olduğunu değiştirin." + "value" : "Yalnızca bir cihaz dili" } } } }, "app.settings.menu.high_color_contrast" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9570,6 +9659,7 @@ }, "app.settings.menu.high_color_contrast_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9653,6 +9743,7 @@ }, "app.settings.menu.increase_text_size" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9736,6 +9827,7 @@ }, "app.settings.menu.increase_text_size_description" : { "comment" : "", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : {