Merge branch 'dev' into metadata-exiv2

This commit is contained in:
Lawrence Lee 2023-08-12 15:08:42 -07:00
commit 7eb7fb210f
No known key found for this signature in database
GPG Key ID: 048FF2B76A63895F
41 changed files with 608 additions and 351 deletions

View File

@ -1,4 +1,6 @@
#01 2009-10-10 JMG
#001 2009-10-10 JMG
#100
#101 @LANGUAGE_DISPLAY_NAME=Català
ABOUT_TAB_BUILD;Versió
ABOUT_TAB_CREDITS;Crèdits

View File

@ -1,12 +1,14 @@
#00 Chinese (Simplified)
#01 2008-02-13 Forrest Sun
#02 2008-11-06 Yang Gao (grantyale)
#03 2013-10-20 Jiero
#04 2014-10-24 Jie Luo
#05 2017-09-18 Chongnuo Ji
#06 2020-08-11 十一元人民币
#07 2021-09-24 十一元人民币
#08 2022-07-26 十一元人民币
#000 Chinese (Simplified)
#001 2008-02-13 Forrest Sun
#002 2008-11-06 Yang Gao (grantyale)
#003 2013-10-20 Jiero
#004 2014-10-24 Jie Luo
#005 2017-09-18 Chongnuo Ji
#006 2020-08-11 十一元人民币
#007 2021-09-24 十一元人民币
#008 2022-07-26 十一元人民币
#100
#101 @LANGUAGE_DISPLAY_NAME=简体中文
ABOUT_TAB_BUILD;版本
ABOUT_TAB_CREDITS;致谢名单

View File

@ -1,51 +1,53 @@
#00 Czech
#01 2008-01-20 translated by absolution
#02 2008-02-21 updated by mkyral (typos and some missing strings)
#03 2008-04-24 updated by mkyral (for version 2.4m1)
#04 2008-10-28 updated by mkyral (for version 2.4 beta1)
#05 2010-11-25 updated by mkyral (for version 3.0)
#06 2011-03-06 updated by mkyral (default branch)
#07 2011-03-20 updated by mkyral (default branch)
#08 2011-05-01 updated by mkyral
#09 2011-05-18 updated by mkyral
#10 2011-06-04 updated by mkyral
#11 2011-06-12 updated by mkyral
#12 2011-06-16 updated by mkyral
#13 2011-07-03 updated by mkyral
#14 2011-07-08 updated by mkyral
#15 2011-09-04 updated by mkyral
#16 2011-09-06 updated by mkyral
#17 2011-11-12 updated by mkyral
#18 2011-12-29 updated by mkyral
#19 2012-02-22 updated by mkyral
#20 2012-04-28 updated by mkyral
#21 2012-10-10 updated by mkyral
#22 2012-11-27 updated by mkyral
#23 2013-03-12 updated by mkyral
#24 2013-04-12 updated by mkyral
#25 2013-09-12 updated by mkyral
#26 2013-09-17 updated by mkyral
#27 2013-12-09 updated by mkyral
#28 2014-01-07 updated by mkyral
#29 2014-04-08 updated by mkyral
#30 2014-04-30 updated by mkyral
#31 2014-05-12 updated by mkyral
#32 2014-10-24 updated by mkyral
#33 2015-02-22 updated by mkyral
#34 2015-07-09 updated by mkyral
#35 2015-11-24 updated by mkyral
#36 2016-10-18 updated by mkyral
#37 2017-01-10 updated by mkyral
#38 2017-04-26 updated by mkyral
#39 2017-07-21 updated by mkyral
#40 2017-12-13 updated by mkyral
#41 2018-03-03 updated by mkyral
#42 2018-10-24 updated by mkyral
#43 2018-12-04 updated by mkyral
#44 2018-12-13 updated by mkyral
#45 2020-04-20 updated by mkyral
#46 2020-04-21 updated by mkyral
#47 2020-06-02 updated by mkyral
#000 Czech
#001 2008-01-20 translated by absolution
#002 2008-02-21 updated by mkyral (typos and some missing strings)
#003 2008-04-24 updated by mkyral (for version 2.4m1)
#004 2008-10-28 updated by mkyral (for version 2.4 beta1)
#005 2010-11-25 updated by mkyral (for version 3.0)
#006 2011-03-06 updated by mkyral (default branch)
#007 2011-03-20 updated by mkyral (default branch)
#008 2011-05-01 updated by mkyral
#009 2011-05-18 updated by mkyral
#010 2011-06-04 updated by mkyral
#011 2011-06-12 updated by mkyral
#012 2011-06-16 updated by mkyral
#013 2011-07-03 updated by mkyral
#014 2011-07-08 updated by mkyral
#015 2011-09-04 updated by mkyral
#016 2011-09-06 updated by mkyral
#017 2011-11-12 updated by mkyral
#018 2011-12-29 updated by mkyral
#019 2012-02-22 updated by mkyral
#020 2012-04-28 updated by mkyral
#021 2012-10-10 updated by mkyral
#022 2012-11-27 updated by mkyral
#023 2013-03-12 updated by mkyral
#024 2013-04-12 updated by mkyral
#025 2013-09-12 updated by mkyral
#026 2013-09-17 updated by mkyral
#027 2013-12-09 updated by mkyral
#028 2014-01-07 updated by mkyral
#029 2014-04-08 updated by mkyral
#030 2014-04-30 updated by mkyral
#031 2014-05-12 updated by mkyral
#032 2014-10-24 updated by mkyral
#033 2015-02-22 updated by mkyral
#034 2015-07-09 updated by mkyral
#035 2015-11-24 updated by mkyral
#036 2016-10-18 updated by mkyral
#037 2017-01-10 updated by mkyral
#038 2017-04-26 updated by mkyral
#039 2017-07-21 updated by mkyral
#040 2017-12-13 updated by mkyral
#041 2018-03-03 updated by mkyral
#042 2018-10-24 updated by mkyral
#043 2018-12-04 updated by mkyral
#044 2018-12-13 updated by mkyral
#045 2020-04-20 updated by mkyral
#046 2020-04-21 updated by mkyral
#047 2020-06-02 updated by mkyral
#100
#101 @LANGUAGE_DISPLAY_NAME=Čeština
ABOUT_TAB_BUILD;Verze
ABOUT_TAB_CREDITS;Zásluhy

View File

@ -1,4 +1,6 @@
#01 2022-04-21 mogensjaeger (github), initial danish translation
#001 2022-04-21 mogensjaeger (github), initial danish translation
#100
#101 @LANGUAGE_DISPLAY_NAME=Dansk
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Credits

View File

@ -1,90 +1,92 @@
#01 keenonkites; Aktualisierte Version für 2.3 beta2
#02 phberlin; basiert auf keenonkites' Erstübersetzung
#03 2007-12-20
#04 2007-12-22
#05 2008-01-08
#06 2008-01-15
#07 2008-02-20
#08 2008-12-19 keenonkites, Anpassungen für 2.4beta4
#09 2008-09-20 keenonkites, Anpassungen für 2.4m2
#10 2008-04-04 Anpassungen für 2.4
#11 Leichte Anpassungen (keenonkites/klonk)
#12 Erweiterung (oduis)
#13 Erweiterung (oduis)
#14 Erweiterung (oduis)
#15 Erweiterung (oduis)
#16 2012-12-05 3.0 alpha: Erweiterung und Korrekturen (Metex)
#17 2012-04-29 Erweiterungen und Korrekturen (MaWe)
#18 Erweiterung (oduis)
#19 Erweiterung (oduis)
#20 2013-02-27 Erweiterung (cytrinox)
#21 2013-12-31 Erweiterung (Ingo)
#22 2015-09-04 komplette Überarbeitung (TooWaBoo)
#23 2015-10-24 Retinexübersetzung und Korrekturen (TooWaBoo)
#24 2015-11-01 Korrekturen (TooWaBoo) RT4.2.450
#25 2015-11-30 Korrekturen (TooWaBoo) RT4.2.507
#26 2015-12-13 Korrekturen (TooWaBoo) RT4.2.514
#26 2015-12-22 Korrekturen (TooWaBoo) RT4.2.536
#27 2016-02-12 Retinexübersetzung (TooWaBoo) RT4.2.730
#28 2016-03-19 Erweiterung/Korrekturen (TooWaBoo) RT4.2.880
#29 2016-05-24 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1005
#30 2016-09-30 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1234
#31 2016-12-01 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1408
#32 2016-12-29 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1464
#33 2017-01-04 Erweiterung/Korrekturen/Soft-Proofing (TooWaBoo) RT4.2.1477
#34 2017-01-07 IPTC (TooWaBoo) RT4.2.1492
#35 2017-02-18 AWB bias (TooWaBoo) RT 5.0 r1
#36 2017-02-23 Korrekturen (TooWaBoo) RT 5.0 r1
#37 2017-03-06 Dynamisches Profil (TooWaBoo) RT 5.0 r1
#38 2017-03-26 Pixel-Shift (TooWaBoo) RT 5.0 r1
#39 06.04.2017 Fast Export (TooWaBoo) RT 5.0 r1
#40 30.04.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1
#41 03.05.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1
#42 13.05.2017 Erweiterung (TooWaBoo) RT 5.0 r1
#43 21.07.2017 Erweiterung (TooWaBoo) RT 5.1
#44 21.09.2017 Erweiterung (TooWaBoo) RT 5.2
#45 15.10.2017 Erweiterung (TooWaBoo) RT 5.3
#46 18.10.2017 Erweiterung (TooWaBoo) RT 5.3
#47 19.11.2017 HDR-Dynamikkompression (TooWaBoo) RT 5.3
#48 13.12.2017 Erweiterung (TooWaBoo) RT 5.3
#49 21.12.2017 Lokaler Kontrast (TooWaBoo) RT 5.3
#50 07.01.2018 Crop Settings (TooWaBoo) RT 5.3
#51 10.02.2018 Erweiterung (TooWaBoo) RT 5.3
#52 10.02.2018 Korrektur (TooWaBoo) RT 5.3
#53 26.02.2018 Erweiterung (TooWaBoo) RT 5.3
#54 30.03.2018 Erweiterung (TooWaBoo) RT 5.4
#55 06.04.2018 Erweiterung (TooWaBoo) RT 5.4
#56 27.04.2018 Erweiterung (TooWaBoo) RT 5.4
#57 17.05.2018 Erweiterung (TooWaBoo) RT 5.4
#58 19.05.2018 Erweiterung (TooWaBoo) RT 5.4
#59 29.05.2018 Erweiterung (TooWaBoo) RT 5.4
#60 14.06.2018 Erweiterung (TooWaBoo) RT 5.4
#61 14.06.2018 Korrektur (TooWaBoo) RT 5.4
#62 22.06.2018 Korrektur (TooWaBoo) RT 5.4
#63 24.06.2018 DCB/RCD+VNG4 (TooWaBoo) RT 5.4
#64 24.06.2018 Erweiterung/Korrektur (TooWaBoo) RT 5.4
#65 25.06.2018 Korrekturen (TooWaBoo) RT 5.4
#66 04.07.2018 Erweiterung (TooWaBoo) RT 5.4
#67 05.07.2018 Erweiterung (TooWaBoo) RT 5.4
#68 05.07.2018 Erweiterung (TooWaBoo) RT 5.4
#69 25.07.2018 Erweiterung (TooWaBoo) RT 5.4
#70 25.07.2018 Korrekturen (TooWaBoo) RT 5.4
#71 28.09.2018 Korrekturen (TooWaBoo) RT 5.5
#72 05.10.2018 Korrekturen (TooWaBoo) RT 5.5
#73 21.11.2018 Erweiterung (TooWaBoo) RT 5.5
#74 24.11.2018 Erweiterung (TooWaBoo) RT 5.5
#75 02.12.2018 Erweiterung (TooWaBoo) RT 5.5
#76 11.12.2018 Erweiterung (TooWaBoo) RT 5.5
#77 16.12.2018 Korrektur Farbwähler-Tooltip (TooWaBoo) RT 5.5
#78 19.01.2019 Erweiterung (TooWaBoo) RT 5.5
#79 24.02.2019 Erweiterung (TooWaBoo) RT 5.5
#80 25.03.2019 Erweiterung (TooWaBoo) RT 5.6
#81 15.04.2019 Erweiterung (TooWaBoo) RT 5.6
#82 25.05.2019 Erweiterung (TooWaBoo) RT 5.6
#83 06.07.2019 Erweiterung (TooWaBoo) RT 5.6
#84 06.10.2019 Erweiterung (TooWaBoo) RT 5.7
#84 18.07.2019 Erweiterung (TooWaBoo) RT 5.6
#85 29.07.2022 Erweiterung (marter, mozzihh) RT 5.9
#001 keenonkites; Aktualisierte Version für 2.3 beta2
#002 phberlin; basiert auf keenonkites' Erstübersetzung
#003 2007-12-20
#004 2007-12-22
#005 2008-01-08
#006 2008-01-15
#007 2008-02-20
#008 2008-12-19 keenonkites, Anpassungen für 2.4beta4
#009 2008-09-20 keenonkites, Anpassungen für 2.4m2
#010 2008-04-04 Anpassungen für 2.4
#011 Leichte Anpassungen (keenonkites/klonk)
#012 Erweiterung (oduis)
#013 Erweiterung (oduis)
#014 Erweiterung (oduis)
#015 Erweiterung (oduis)
#016 2012-12-05 3.0 alpha: Erweiterung und Korrekturen (Metex)
#017 2012-04-29 Erweiterungen und Korrekturen (MaWe)
#018 Erweiterung (oduis)
#019 Erweiterung (oduis)
#020 2013-02-27 Erweiterung (cytrinox)
#021 2013-12-31 Erweiterung (Ingo)
#022 2015-09-04 komplette Überarbeitung (TooWaBoo)
#023 2015-10-24 Retinexübersetzung und Korrekturen (TooWaBoo)
#024 2015-11-01 Korrekturen (TooWaBoo) RT4.2.450
#025 2015-11-30 Korrekturen (TooWaBoo) RT4.2.507
#026 2015-12-13 Korrekturen (TooWaBoo) RT4.2.514
#026 2015-12-22 Korrekturen (TooWaBoo) RT4.2.536
#027 2016-02-12 Retinexübersetzung (TooWaBoo) RT4.2.730
#028 2016-03-19 Erweiterung/Korrekturen (TooWaBoo) RT4.2.880
#029 2016-05-24 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1005
#030 2016-09-30 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1234
#031 2016-12-01 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1408
#032 2016-12-29 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1464
#033 2017-01-04 Erweiterung/Korrekturen/Soft-Proofing (TooWaBoo) RT4.2.1477
#034 2017-01-07 IPTC (TooWaBoo) RT4.2.1492
#035 2017-02-18 AWB bias (TooWaBoo) RT 5.0 r1
#036 2017-02-23 Korrekturen (TooWaBoo) RT 5.0 r1
#037 2017-03-06 Dynamisches Profil (TooWaBoo) RT 5.0 r1
#038 2017-03-26 Pixel-Shift (TooWaBoo) RT 5.0 r1
#039 06.04.2017 Fast Export (TooWaBoo) RT 5.0 r1
#040 30.04.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1
#041 03.05.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1
#042 13.05.2017 Erweiterung (TooWaBoo) RT 5.0 r1
#043 21.07.2017 Erweiterung (TooWaBoo) RT 5.1
#044 21.09.2017 Erweiterung (TooWaBoo) RT 5.2
#045 15.10.2017 Erweiterung (TooWaBoo) RT 5.3
#046 18.10.2017 Erweiterung (TooWaBoo) RT 5.3
#047 19.11.2017 HDR-Dynamikkompression (TooWaBoo) RT 5.3
#048 13.12.2017 Erweiterung (TooWaBoo) RT 5.3
#049 21.12.2017 Lokaler Kontrast (TooWaBoo) RT 5.3
#050 07.01.2018 Crop Settings (TooWaBoo) RT 5.3
#051 10.02.2018 Erweiterung (TooWaBoo) RT 5.3
#052 10.02.2018 Korrektur (TooWaBoo) RT 5.3
#053 26.02.2018 Erweiterung (TooWaBoo) RT 5.3
#054 30.03.2018 Erweiterung (TooWaBoo) RT 5.4
#055 06.04.2018 Erweiterung (TooWaBoo) RT 5.4
#056 27.04.2018 Erweiterung (TooWaBoo) RT 5.4
#057 17.05.2018 Erweiterung (TooWaBoo) RT 5.4
#058 19.05.2018 Erweiterung (TooWaBoo) RT 5.4
#059 29.05.2018 Erweiterung (TooWaBoo) RT 5.4
#060 14.06.2018 Erweiterung (TooWaBoo) RT 5.4
#061 14.06.2018 Korrektur (TooWaBoo) RT 5.4
#062 22.06.2018 Korrektur (TooWaBoo) RT 5.4
#063 24.06.2018 DCB/RCD+VNG4 (TooWaBoo) RT 5.4
#064 24.06.2018 Erweiterung/Korrektur (TooWaBoo) RT 5.4
#065 25.06.2018 Korrekturen (TooWaBoo) RT 5.4
#066 04.07.2018 Erweiterung (TooWaBoo) RT 5.4
#067 05.07.2018 Erweiterung (TooWaBoo) RT 5.4
#068 05.07.2018 Erweiterung (TooWaBoo) RT 5.4
#069 25.07.2018 Erweiterung (TooWaBoo) RT 5.4
#070 25.07.2018 Korrekturen (TooWaBoo) RT 5.4
#071 28.09.2018 Korrekturen (TooWaBoo) RT 5.5
#072 05.10.2018 Korrekturen (TooWaBoo) RT 5.5
#073 21.11.2018 Erweiterung (TooWaBoo) RT 5.5
#074 24.11.2018 Erweiterung (TooWaBoo) RT 5.5
#075 02.12.2018 Erweiterung (TooWaBoo) RT 5.5
#076 11.12.2018 Erweiterung (TooWaBoo) RT 5.5
#077 16.12.2018 Korrektur Farbwähler-Tooltip (TooWaBoo) RT 5.5
#078 19.01.2019 Erweiterung (TooWaBoo) RT 5.5
#079 24.02.2019 Erweiterung (TooWaBoo) RT 5.5
#080 25.03.2019 Erweiterung (TooWaBoo) RT 5.6
#081 15.04.2019 Erweiterung (TooWaBoo) RT 5.6
#082 25.05.2019 Erweiterung (TooWaBoo) RT 5.6
#083 06.07.2019 Erweiterung (TooWaBoo) RT 5.6
#084 06.10.2019 Erweiterung (TooWaBoo) RT 5.7
#084 18.07.2019 Erweiterung (TooWaBoo) RT 5.6
#085 29.07.2022 Erweiterung (marter, mozzihh) RT 5.9
#100
#101 @LANGUAGE_DISPLAY_NAME=Deutsch
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Danksagungen

View File

@ -1,5 +1,7 @@
#01 Español - Castellano
#02 2022-10-08 Francisco Lorés y Javier Bartol, para la versión 5.9
#001 Español - Castellano
#002 2022-10-08 Francisco Lorés y Javier Bartol, para la versión 5.9
#100
#101 @LANGUAGE_DISPLAY_NAME=Español (Castellano)
ABOUT_TAB_BUILD;Versión
ABOUT_TAB_CREDITS;Reconocimientos

View File

@ -1,66 +1,68 @@
#01 Latin America - Spanish
#02 Conventions used to keep the same writing style along new texts and versions
#03
#04 Abreviaturas (Abbreviations)
#05 -----------------------------
#06 AC: Aberración cromática (fringe)
#07 B&N: Blanco y Negro (Black & White)
#08 CV: Corrección de Viñeteado (Vignette Filter: in Transform tab)
#09 FG: Filtro Graduado (Gradient Filter)
#10 FV: Filtrar Viñeteado (Vignette Filter: in Exposure tab)
#11 MC: Mezclador de canales (Channel Mixer)
#12 RGB: Modelo de color Rojo Verde Azul (Red Green Blue)
#13 WB: Balance de blancos (White Balance)
#14
#15 Convención de traducción de términos importantes,
#16 sin equivalente estándar o poco conocidos en español:
#17 ---------------------------------------------
#18 Artifacts: Elementos extraños
#19 Brightness: Brillo
#20 Checkbox: Casilla (seleccionada/desmarcada)
#21 Chroma: Crominancia (**, definida en es.wikipedia)
#22 Chromatic: Cromática (*)
#23 Chromaticity: Cromaticidad (**)
#24 Colorfulness: Colorido
#25 Cyan: Cian (*)
#26 Dark Frame: Toma Negra
#27 Dim: Luz tenue
#28 Feather: Difuminado
#29 Illuminant: Iluminante
#30 Lightness: Claridad
#31 Luminance: Luminancia (*)
#32 Luminosity: Luminosidad
#33 Mapping: Mapeo (*)
#34 Sharpening: Enfoque
#35 Slider: Control deslizante
#36 Tone Curve: Curva tonal
#37 Vibrance: Vibranza
#38
#39 (*) Término incluido en diccionario RAE
#40 (**) Término no incluido en diccionario RAE
#41
#42 Términos conservados en Inglés por no tener traducción breve
#43 al español en el sentido usado por RT/fotografía digital
#44 -----------------------------------------------------
#45 ICM (Image Color Management)
#46 Gamut
#47 Gamma
#48 Raw
#49
#50 2008-01-15 keenonkites, first translation
#51 2008-03-03 Ioritz Ibarguren, corrections
#52 2008-04-05 keenonkites, completed for 2.4m1
#53 2008-04-09 Ramon, partly corrected (part of 2.3)
#54 2008-04-29 Ramon, small correction
#55 2008-06-09 Ramon, Adaptions regarding 2.4m1 and others
#56 2008-09-20 keenonkites, first version for 2.4m2
#57 2008-12-19 keenonkites, first version for 2.4beta4
#58 2010-12-07 rickydh, some translations of untranslated keys for 3.0 alpha1
#59 2011-12-25 plores, translation improvement, translation of untranslated strings
#60 2013-01-03 OdeLama, translation for v4.0.12 of untranslated/changed strings
#61 2014-01-14 mapelo, bug correction and small enhancements.
#62 2014-10-10 fotger
#63 2018-12-09 Faber777
#001 Latin America - Spanish
#002 Conventions used to keep the same writing style along new texts and versions
#003
#004 Abreviaturas (Abbreviations)
#005 -----------------------------
#006 AC: Aberración cromática (fringe)
#007 B&N: Blanco y Negro (Black & White)
#008 CV: Corrección de Viñeteado (Vignette Filter: in Transform tab)
#009 FG: Filtro Graduado (Gradient Filter)
#010 FV: Filtrar Viñeteado (Vignette Filter: in Exposure tab)
#011 MC: Mezclador de canales (Channel Mixer)
#012 RGB: Modelo de color Rojo Verde Azul (Red Green Blue)
#013 WB: Balance de blancos (White Balance)
#014
#015 Convención de traducción de términos importantes,
#016 sin equivalente estándar o poco conocidos en español:
#017 ---------------------------------------------
#018 Artifacts: Elementos extraños
#019 Brightness: Brillo
#020 Checkbox: Casilla (seleccionada/desmarcada)
#021 Chroma: Crominancia (**, definida en es.wikipedia)
#022 Chromatic: Cromática (*)
#023 Chromaticity: Cromaticidad (**)
#024 Colorfulness: Colorido
#025 Cyan: Cian (*)
#026 Dark Frame: Toma Negra
#027 Dim: Luz tenue
#028 Feather: Difuminado
#029 Illuminant: Iluminante
#030 Lightness: Claridad
#031 Luminance: Luminancia (*)
#032 Luminosity: Luminosidad
#033 Mapping: Mapeo (*)
#034 Sharpening: Enfoque
#035 Slider: Control deslizante
#036 Tone Curve: Curva tonal
#037 Vibrance: Vibranza
#038
#039 (*) Término incluido en diccionario RAE
#040 (**) Término no incluido en diccionario RAE
#041
#042 Términos conservados en Inglés por no tener traducción breve
#043 al español en el sentido usado por RT/fotografía digital
#044 -----------------------------------------------------
#045 ICM (Image Color Management)
#046 Gamut
#047 Gamma
#048 Raw
#049
#050 2008-01-15 keenonkites, first translation
#051 2008-03-03 Ioritz Ibarguren, corrections
#052 2008-04-05 keenonkites, completed for 2.4m1
#053 2008-04-09 Ramon, partly corrected (part of 2.3)
#054 2008-04-29 Ramon, small correction
#055 2008-06-09 Ramon, Adaptions regarding 2.4m1 and others
#056 2008-09-20 keenonkites, first version for 2.4m2
#057 2008-12-19 keenonkites, first version for 2.4beta4
#058 2010-12-07 rickydh, some translations of untranslated keys for 3.0 alpha1
#059 2011-12-25 plores, translation improvement, translation of untranslated strings
#060 2013-01-03 OdeLama, translation for v4.0.12 of untranslated/changed strings
#061 2014-01-14 mapelo, bug correction and small enhancements.
#062 2014-10-10 fotger
#063 2018-12-09 Faber777
#100
#101 @LANGUAGE_DISPLAY_NAME=Español (Latinoamericano)
ABOUT_TAB_BUILD;Versión
ABOUT_TAB_CREDITS;Créditos

View File

@ -1,4 +1,6 @@
#01 2008-03-01 Initial translation by Hombre
#001 2008-03-01 Initial translation by Hombre
#100
#101 @LANGUAGE_DISPLAY_NAME=Français
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Crédits

View File

@ -1,8 +1,10 @@
#01 2008-01-19 v2.3 breek
#02 2008-11-01 v2.4 pantaraf, chelidon, roberto
#03 2011-08-26 v3.0 joker, chelidon, ffsup2
#04 2011-08-31 v4.0 chelidon, ffsup2
#05 2014-04-21 crx
#001 2008-01-19 v2.3 breek
#002 2008-11-01 v2.4 pantaraf, chelidon, roberto
#003 2011-08-26 v3.0 joker, chelidon, ffsup2
#004 2011-08-31 v4.0 chelidon, ffsup2
#005 2014-04-21 crx
#100
#101 @LANGUAGE_DISPLAY_NAME=Italiano
ABOUT_TAB_BUILD;Versione
ABOUT_TAB_CREDITS;Riconoscimenti

View File

@ -1,4 +1,6 @@
#Last update 10-12-2022
#001 Last update 10-12-2022
#100
#101 @LANGUAGE_DISPLAY_NAME=日本語
ABOUT_TAB_BUILD;バージョン
ABOUT_TAB_CREDITS;クレジット

View File

@ -1,4 +1,6 @@
#01 2010-11-20 RT 3.0 alpha 1 rev. 597:fb291bf74c by Dr. Gyurkó M. 'dualon' Dávid
#001 2010-11-20 RT 3.0 alpha 1 rev. 597:fb291bf74c by Dr. Gyurkó M. 'dualon' Dávid
#100
#101 @LANGUAGE_DISPLAY_NAME=Magyar
ABOUT_TAB_BUILD;Verzió
ABOUT_TAB_CREDITS;Szerzők

View File

@ -1,20 +1,22 @@
#01 2007-12-26 Rens Duijsens en Brent Huisman
#02 2008-03-14 updated by reggybe
#03 2009-02-01 updated to RT2.4-RC by paul.matthijsse
#04 2010-05-02 updated to rt3a1 by paul.matthijsse
#05 2011-03-03 updated to rt3a2 by paul.matthijsse
#06 2011-10-10 updated to rt4.0 by wim ter meer
#07 2011-11-28 updated by pm
#08 2012-05-17 updated to rt4.0.8 by wim ter meer
#09 2013-03-27 updated to rt4.0.10 by wim ter meer
#10 2013-11-27 updated to rt4.0.11 by wim ter meer
#11 2014-03-24 updated to rt4.1 by wim ter meer
#12 2014-10-19 updated to rt4.1.92 by wim ter meer
#13 2015-03-03 updated to rt4.2.102 by wim ter meer
#14 2015-11-23 update by wim ter meer
#15 2016-07-21 update by wim ter meer
#16 2017-04-21 update by wim ter meer
#17 2020-06-05 update by dheijl
#001 2007-12-26 Rens Duijsens en Brent Huisman
#002 2008-03-14 updated by reggybe
#003 2009-02-01 updated to RT2.4-RC by paul.matthijsse
#004 2010-05-02 updated to rt3a1 by paul.matthijsse
#005 2011-03-03 updated to rt3a2 by paul.matthijsse
#006 2011-10-10 updated to rt4.0 by wim ter meer
#007 2011-11-28 updated by pm
#008 2012-05-17 updated to rt4.0.8 by wim ter meer
#009 2013-03-27 updated to rt4.0.10 by wim ter meer
#010 2013-11-27 updated to rt4.0.11 by wim ter meer
#011 2014-03-24 updated to rt4.1 by wim ter meer
#012 2014-10-19 updated to rt4.1.92 by wim ter meer
#013 2015-03-03 updated to rt4.2.102 by wim ter meer
#014 2015-11-23 update by wim ter meer
#015 2016-07-21 update by wim ter meer
#016 2017-04-21 update by wim ter meer
#017 2020-06-05 update by dheijl
#100
#101 @LANGUAGE_DISPLAY_NAME=Nederlands
ABOUT_TAB_BUILD;Versie
ABOUT_TAB_CREDITS;Credits

View File

@ -1,16 +1,18 @@
#01 2007-12-24 Mateusz Ludwin
#02 2010-01-08 Bartosz "Simek" Kaszubowski
#03 2011-09-06 Dariusz 'Salvadhor' Duma
#04 2011-11-30 DrSlony
#05 2012-01-14 DrSlony
#06 2012-01-30 DrSlony
#07 2012-04-02 DrSlony
#08 2013-05-21 DrSlony
#09 2014-10-16 DrSlony
#10 2020-02-02 Bartłomiej Wiśniowski
#11 2020-02-02 Bartłomiej Wiśniowski
#12 2020-02-15 Bartłomiej Wiśniowski
#13 2020-02-17 Bartłomiej Wiśniowski
#001 2007-12-24 Mateusz Ludwin
#002 2010-01-08 Bartosz "Simek" Kaszubowski
#003 2011-09-06 Dariusz 'Salvadhor' Duma
#004 2011-11-30 DrSlony
#005 2012-01-14 DrSlony
#006 2012-01-30 DrSlony
#007 2012-04-02 DrSlony
#008 2013-05-21 DrSlony
#009 2014-10-16 DrSlony
#010 2020-02-02 Bartłomiej Wiśniowski
#011 2020-02-02 Bartłomiej Wiśniowski
#012 2020-02-15 Bartłomiej Wiśniowski
#013 2020-02-17 Bartłomiej Wiśniowski
#100
#101 @LANGUAGE_DISPLAY_NAME=Polski
ABOUT_TAB_BUILD;Wersja
ABOUT_TAB_CREDITS;Zasługi

View File

@ -1,5 +1,7 @@
#01 2018-07-25 Digitalpix58
#02 2019-03-11 Xendez
#001 2018-07-25 Digitalpix58
#002 2019-03-11 Xendez
#100
#101 @LANGUAGE_DISPLAY_NAME=Português
ABOUT_TAB_BUILD;Versão
ABOUT_TAB_CREDITS;Créditos

View File

@ -1,5 +1,7 @@
#01 2018-07-25 Digitalpix58
#02 2019-03-12 Xendez
#001 2018-07-25 Digitalpix58
#002 2019-03-12 Xendez
#100
#101 @LANGUAGE_DISPLAY_NAME=Português brasileiro
ABOUT_TAB_BUILD;Versão
ABOUT_TAB_CREDITS;Créditos

View File

@ -45,6 +45,13 @@ comments in the right order, e.g.:
#01 Line 2...
#02 3, etc.
Metadata for the language file appear in comments with the following syntax:
#10 @KEY=VALUE
The @ character must appear immediately after the whitespace following the
numeric prefix. KEY is the metadata name and VALUE is value for that metadata
name. The following key(s) are recognized:
a) LANGUAGE_DISPLAY_NAME: The language name as shown in preferences.
To create a file with only Latin characters from a non-Latin one, you can use
sed with the "y" command. For example, to create a latin-only "Polish (Latin
Characters)" file from the non-latin "Polish" one:

View File

@ -1,12 +1,14 @@
#01 2007-12-23 ArtDen
#02 2008-07-20 Denis Artemov
#03 2009-02-16 Kvark
#04 2010-02-26 Sergey Smirnov AKA smiserg
#05 2010-11-01 Ilia Popov <ilia_popov@rambler.ru>
#06 2012-07-17 Roman Milanskij <loooooker@gmail.com>
#07 2014-02-12 Kostia (Kildor) Romanov <kromanov@gmail.com>
#08 2018-02-10 Kostia (Kildor) Romanov <kromanov@gmail.com>
#09 2018-12-13 Kostia (Kildor) Romanov <kromanov@gmail.com>
#001 2007-12-23 ArtDen
#002 2008-07-20 Denis Artemov
#003 2009-02-16 Kvark
#004 2010-02-26 Sergey Smirnov AKA smiserg
#005 2010-11-01 Ilia Popov <ilia_popov@rambler.ru>
#006 2012-07-17 Roman Milanskij <loooooker@gmail.com>
#007 2014-02-12 Kostia (Kildor) Romanov <kromanov@gmail.com>
#008 2018-02-10 Kostia (Kildor) Romanov <kromanov@gmail.com>
#009 2018-12-13 Kostia (Kildor) Romanov <kromanov@gmail.com>
#100
#101 @LANGUAGE_DISPLAY_NAME=Русский
ABOUT_TAB_BUILD;Версия
ABOUT_TAB_CREDITS;Авторы

View File

@ -1,4 +1,6 @@
#01 2010-11-16 gpopac
#001 2010-11-16 gpopac
#100
#101 @LANGUAGE_DISPLAY_NAME=српски
ABOUT_TAB_BUILD;Издање
ABOUT_TAB_CREDITS;Заслуге

View File

@ -1,4 +1,6 @@
#01 2019-10-05 Matjaž Jeran
#001 2019-10-05 Matjaž Jeran
#100
#101 @LANGUAGE_DISPLAY_NAME=Slovenščina
ABOUT_TAB_BUILD;Verzija
ABOUT_TAB_CREDITS;Zasluge

View File

@ -1,7 +1,9 @@
#01 2008-01-22 Emil Ericsson
#02 2010-2013 Updated by Johan Thor
#03 2015-08-09 Johan Thor
#04 2016-12-30 Johan Thor
#001 2008-01-22 Emil Ericsson
#002 2010-2013 Updated by Johan Thor
#003 2015-08-09 Johan Thor
#004 2016-12-30 Johan Thor
#100
#101 @LANGUAGE_DISPLAY_NAME=Svenska
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Erkännande

View File

@ -227,6 +227,8 @@ menu separator {
}
#PlacesPaned .view.separator {
min-height: 0.16666666666666666em;
color: #363636;
}
#MetaPanelNotebook separator {

View File

@ -207,6 +207,8 @@ menu separator {
}
#PlacesPaned .view.separator {
min-height: 0.16666666666666666em;
color: #363636;
}
#MetaPanelNotebook separator {

View File

@ -123,6 +123,7 @@ float* RawImageSource::CA_correct_RT(
double cared,
double cablue,
bool avoidColourshift,
int border_crop,
array2D<float> &rawData,
double* fitParamsTransfer,
bool fitParamsIn,
@ -145,7 +146,7 @@ float* RawImageSource::CA_correct_RT(
const unsigned int cfa[2][2] = {{FC(0,0), FC(0,1)}, {FC(1,0), FC(1,1)}};
constexpr int ts = 128;
constexpr int tsh = ts / 2;
constexpr int cb = 2; // 2 pixels border will be excluded from correction
const int cb = border_crop;
//shifts to location of vertical and diagonal neighbours
constexpr int v1 = ts, v2 = 2 * ts, v3 = 3 * ts, v4 = 4 * ts; //, p1=-ts+1, p2=-2*ts+2, p3=-3*ts+3, m1=ts+1, m2=2*ts+2, m3=3*ts+3;

View File

@ -647,6 +647,7 @@ Camera constants:
"make_model": "Canon EOS 7D Mark II",
"dcraw_matrix": [ 7268,-1082,-969,-4186,11839,2663,-825,2029,5839 ], // dng_v8.7 d65
//"dcraw_matrix": [ 6285,-147,-821,-4080,11695,2714,-1045,2459,5497 ], // DXO D50
"raw_crop": [ 72, 38, 5496, 3669 ],
"ranges": {
"white": [
{ "iso": [ 100, 125 ], "levels": 13500 }, // typical 13583 - LENR 13550
@ -2993,8 +2994,8 @@ Camera constants:
"dcraw_matrix": [ 6629,-1900,-483,-4618,12349,2550,-622,1381,6514 ], // DNG_v9.1.1 D65
"raw_crop": [ 0, 0, -36, 0 ], // full raw frame 8000x5320 - 36 rightmost columns are garbage
"ranges": { "black": 512, "white": 16300 },
// PDAF info provided by Horshack with the rawshack tool (http://testcams.com/rawshack/)
"pdaf_pattern" : [ 0,24,36,60,84,120,132,156,192,204,240,252,276,300,324,360,372,396,420 ],
// PDAF lines pattern detected from image provided by elite4jonny at https://github.com/Beep6581/RawTherapee/issues/6801.
"pdaf_pattern" : [ 0,24,36,60,84,120,132,156,192,204,240,252,276,300,324,360,372,396,420,444,480,492,504,540,564,576,612,636,660,696,720,732,756,780,804,840 ],
"pdaf_offset" : 31
},

View File

@ -429,6 +429,16 @@ std::map<std::string, std::string> getAliases(const Glib::ustring& profile_dir)
return res;
}
/**
* Returns a locale-independent case-insensitive collate key. Differs from
* Glib::ustring::casefold_collate_key() in that the Glib method may return
* different results depending on the current locale.
*/
std::string casefold_collate_key(const Glib::ustring &str)
{
return str.casefold().raw();
}
class DCPMetadata
{
private:
@ -2180,7 +2190,7 @@ void DCPStore::init(const Glib::ustring& rt_profile_dir, bool loadAll)
&& lastdot <= sname.size() - 4
&& !sname.casefold().compare(lastdot, 4, ".dcp")
) {
file_std_profiles[sname.substr(0, lastdot).casefold_collate_key()] = fname; // They will be loaded and cached on demand
file_std_profiles[casefold_collate_key(sname.substr(0, lastdot))] = fname; // They will be loaded and cached on demand
}
} else {
// Directory
@ -2191,10 +2201,10 @@ void DCPStore::init(const Glib::ustring& rt_profile_dir, bool loadAll)
for (const auto& alias : getAliases(rt_profile_dir)) {
const Glib::ustring alias_name = Glib::ustring(alias.first).uppercase();
const std::map<std::string, Glib::ustring>::const_iterator real = file_std_profiles.find(Glib::ustring(alias.second).casefold_collate_key());
const std::map<std::string, Glib::ustring>::const_iterator real = file_std_profiles.find(casefold_collate_key(alias.second));
if (real != file_std_profiles.end()) {
file_std_profiles[alias_name.casefold_collate_key()] = real->second;
file_std_profiles[casefold_collate_key(alias_name)] = real->second;
}
}
}
@ -2241,7 +2251,7 @@ DCPProfile* DCPStore::getProfile(const Glib::ustring& filename) const
DCPProfile* DCPStore::getStdProfile(const Glib::ustring& requested_cam_short_name) const
{
const std::map<std::string, Glib::ustring>::const_iterator iter = file_std_profiles.find(requested_cam_short_name.casefold_collate_key());
const std::map<std::string, Glib::ustring>::const_iterator iter = file_std_profiles.find(casefold_collate_key(requested_cam_short_name));
if (iter != file_std_profiles.end()) {
return getProfile(iter->second);
}

View File

@ -5333,6 +5333,7 @@ void ImProcFunctions::blendstruc(int bfw, int bfh, LabImage* bufcolorig, float r
static void blendmask(const local_params& lp, int xstart, int ystart, int cx, int cy, int bfw, int bfh, LabImage* bufexporig, LabImage* original, LabImage* bufmaskor, LabImage* originalmas, float bl, float blab, int inv)
{
bl /= 10.f;
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
@ -18649,7 +18650,7 @@ void ImProcFunctions::Lab_Local(
const float rad = params->locallab.spots.at(sp).radmask;
const float gamma = params->locallab.spots.at(sp).gammask;
const float slope = params->locallab.spots.at(sp).slopmask;
float blendm = params->locallab.spots.at(sp).blendmask;
float blendm = 0.1 * params->locallab.spots.at(sp).blendmask;
float blendmab = params->locallab.spots.at(sp).blendmaskab;
if (lp.showmask_met == 2) {
blendm = 0.f;//normalize behavior mask with others no action of blend

View File

@ -1716,15 +1716,14 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens
if (numFrames == 4) {
double fitParams[64];
float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false, options.chunkSizeCA, options.measure);
float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, *rawDataFrames[0], fitParams, false, true, nullptr, false, options.chunkSizeCA, options.measure);
for (int i = 1; i < 3; ++i) {
CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false, options.chunkSizeCA, options.measure);
CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, *rawDataFrames[i], fitParams, true, false, buffer, false, options.chunkSizeCA, options.measure);
}
CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true, options.chunkSizeCA, options.measure);
CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, *rawDataFrames[3], fitParams, true, false, buffer, true, options.chunkSizeCA, options.measure);
} else {
CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, rawData, nullptr, false, false, nullptr, true, options.chunkSizeCA, options.measure);
CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, rawData, nullptr, false, false, nullptr, true, options.chunkSizeCA, options.measure);
}
}

View File

@ -251,6 +251,7 @@ protected:
double cared,
double cablue,
bool avoidColourshift,
int border,
array2D<float> &rawData,
double* fitParamsTransfer,
bool fitParamsIn,

View File

@ -36,7 +36,7 @@ BayerProcess::BayerProcess () :
{
auto m = ProcEventMapper::getInstance();
EvDemosaicBorder = m->newEvent(DEMOSAIC, "HISTORY_MSG_RAW_BORDER");
EvDemosaicBorder = m->newEvent(DARKFRAME, "HISTORY_MSG_RAW_BORDER");
EvDemosaicContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_CONTRAST");
EvDemosaicAutoContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST");
EvDemosaicPixelshiftDemosaicMethod = m->newEvent(DEMOSAIC, "HISTORY_MSG_PIXELSHIFT_DEMOSAIC");

View File

@ -905,6 +905,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel)
send_to_external = Gtk::manage(new PopUpButton("", false));
send_to_external->set_tooltip_text(M("MAIN_BUTTON_SENDTOEDITOR_TOOLTIP"));
send_to_external->setEmptyImage("palette-brush.png");
setExpandAlignProperties(send_to_external->buttonGroup, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL);
updateExternalEditorWidget(
options.externalEditorIndex >= 0 ? options.externalEditorIndex : options.externalEditors.size(),
@ -2037,7 +2038,7 @@ bool EditorPanel::idle_saveImage (ProgressConnector<rtengine::IImagefloat*> *pc,
msgd.run ();
saveimgas->set_sensitive (true);
send_to_external->set_sensitive(true);
send_to_external->set_sensitive(send_to_external->getEntryCount());
isProcessing = false;
}
@ -2065,7 +2066,7 @@ bool EditorPanel::idle_imageSaved (ProgressConnector<int> *pc, rtengine::IImagef
}
saveimgas->set_sensitive (true);
send_to_external->set_sensitive(true);
send_to_external->set_sensitive(send_to_external->getEntryCount());
parent->setProgressStr ("");
parent->setProgress (0.);
@ -2256,8 +2257,10 @@ void EditorPanel::sendToExternalPressed()
dialog->show();
} else {
struct ExternalEditor editor = options.externalEditors.at(options.externalEditorIndex);
external_editor_info = Gio::AppInfo::create_from_commandline(editor.command, editor.name, Gio::APP_INFO_CREATE_NONE);
external_editor_native_command = editor.native_command;
external_editor_info = {
editor.name,
editor.command,
editor.native_command};
sendToExternal();
}
}
@ -2395,7 +2398,7 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector<rtengine::IImagefloat*> *p
Gtk::MessageDialog msgd (*parent, msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
msgd.run ();
saveimgas->set_sensitive (true);
send_to_external->set_sensitive(true);
send_to_external->set_sensitive(send_to_external->getEntryCount());
}
return false;
@ -2416,14 +2419,14 @@ bool EditorPanel::idle_sentToGimp (ProgressConnector<int> *pc, rtengine::IImagef
if ((!img && Glib::file_test(filename, Glib::FILE_TEST_IS_REGULAR)) || (img && !errore)) {
saveimgas->set_sensitive (true);
send_to_external->set_sensitive(true);
send_to_external->set_sensitive(send_to_external->getEntryCount());
parent->setProgressStr ("");
parent->setProgress (0.);
bool success = false;
setUserOnlyPermission(Gio::File::create_for_path(filename), false);
success = ExtProgStore::openInExternalEditor(filename, external_editor_info, external_editor_native_command);
success = ExtProgStore::openInExternalEditor(filename, external_editor_info);
if (!success) {
Gtk::MessageDialog msgd (*parent, M ("MAIN_MSG_CANNOTSTARTEDITOR"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
@ -2452,12 +2455,16 @@ RTAppChooserDialog *EditorPanel::getAppChooserDialog()
void EditorPanel::onAppChooserDialogResponse(int responseId)
{
switch (responseId) {
case Gtk::RESPONSE_OK:
case Gtk::RESPONSE_OK: {
getAppChooserDialog()->close();
external_editor_info = getAppChooserDialog()->get_app_info();
external_editor_native_command = false;
const auto app_info = getAppChooserDialog()->get_app_info();
external_editor_info = {
app_info->get_name(),
app_info->get_commandline(),
false};
sendToExternal();
break;
}
case Gtk::RESPONSE_CANCEL:
case Gtk::RESPONSE_CLOSE:
getAppChooserDialog()->close();
@ -2788,7 +2795,10 @@ void EditorPanel::updateExternalEditorWidget(int selectedIndex, const std::vecto
send_to_external->insertEntry(i, "palette-brush.png", name, &send_to_external_radio_group);
}
}
#ifndef __APPLE__
send_to_external->addEntry("palette-brush.png", M("GENERAL_OTHER"), &send_to_external_radio_group);
#endif
send_to_external->set_sensitive(send_to_external->getEntryCount());
send_to_external->setSelected(selectedIndex);
send_to_external->show();
}

View File

@ -21,6 +21,7 @@
#include <gtkmm.h>
#include "extprog.h"
#include "histogrampanel.h"
#include "history.h"
#include "imageareapanel.h"
@ -252,8 +253,7 @@ private:
Gtk::Button* navSync;
Gtk::Button* navNext;
Gtk::Button* navPrev;
Glib::RefPtr<Gio::AppInfo> external_editor_info;
bool external_editor_native_command;
EditorInfo external_editor_info;
std::unique_ptr<RTAppChooserDialog> app_chooser_dialog;
ExternalEditorChangedSignal *externalEditorChangedSignal;
sigc::connection externalEditorChangedSignalConnection;

View File

@ -37,7 +37,9 @@ ExternalEditorPreferences::ExternalEditorPreferences():
list_view = Gtk::manage(new Gtk::TreeView());
list_view->set_model(list_model);
list_view->append_column(*Gtk::manage(makeAppColumn()));
#ifndef __APPLE__
list_view->append_column(*Gtk::manage(makeNativeCommandColumn()));
#endif
list_view->append_column(*Gtk::manage(makeCommandColumn()));
for (auto &&column : list_view->get_columns()) {
@ -59,11 +61,18 @@ ExternalEditorPreferences::ExternalEditorPreferences():
button_remove = Gtk::manage(new Gtk::Button());
button_add->set_image(*add_image);
button_remove->set_image(*remove_image);
button_app_chooser = Gtk::manage(new Gtk::Button(M("PREFERENCES_EXTERNALEDITOR_CHANGE")));
button_app_chooser =
#ifdef __APPLE__
nullptr;
#else
Gtk::manage(new Gtk::Button(M("PREFERENCES_EXTERNALEDITOR_CHANGE")));
#endif
button_file_chooser = Gtk::manage(new Gtk::Button(M("PREFERENCES_EXTERNALEDITOR_CHANGE_FILE")));
button_app_chooser->signal_pressed().connect(sigc::mem_fun(
*this, &ExternalEditorPreferences::openAppChooserDialog));
if (button_app_chooser) {
button_app_chooser->signal_pressed().connect(sigc::mem_fun(
*this, &ExternalEditorPreferences::openAppChooserDialog));
}
button_add->signal_pressed().connect(sigc::mem_fun(
*this, &ExternalEditorPreferences::addEditor));
button_file_chooser->signal_pressed().connect(sigc::mem_fun(
@ -77,7 +86,9 @@ ExternalEditorPreferences::ExternalEditorPreferences():
// Toolbar.
toolbar.set_halign(Gtk::Align::ALIGN_END);
toolbar.add(*button_app_chooser);
if (button_app_chooser) {
toolbar.add(*button_app_chooser);
}
toolbar.add(*button_file_chooser);
toolbar.add(*button_add);
toolbar.add(*button_remove);
@ -156,6 +167,9 @@ void ExternalEditorPreferences::addEditor()
}
row[model_columns.name] = "-";
#ifdef __APPLE__
row[model_columns.native_command] = true;
#endif
list_view->get_selection()->select(row);
}
@ -244,7 +258,12 @@ void ExternalEditorPreferences::onFileChooserDialogResponse(
for (const auto &selected : selection) {
auto row = *list_model->get_iter(selected);
row[model_columns.icon] = Glib::RefPtr<Gio::Icon>(nullptr);
row[model_columns.native_command] = false;
row[model_columns.native_command] =
#ifdef __APPLE__
true;
#else
false;
#endif
row[model_columns.command] =
#ifdef WIN32
'"' + dialog->get_filename() + '"';
@ -360,7 +379,9 @@ void ExternalEditorPreferences::setAppName(
void ExternalEditorPreferences::updateToolbarSensitivity()
{
bool selected = list_view->get_selection()->count_selected_rows();
button_app_chooser->set_sensitive(selected);
if (button_app_chooser) {
button_app_chooser->set_sensitive(selected);
}
button_file_chooser->set_sensitive(selected);
button_remove->set_sensitive(selected);
}

View File

@ -344,13 +344,13 @@ bool ExtProgStore::openInCustomEditor (const Glib::ustring& fileName, const Glib
}
bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const Glib::RefPtr<Gio::AppInfo> &editorInfo, bool nativeCommand)
bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const EditorInfo &editorInfo)
{
if (nativeCommand) {
if (editorInfo.isNativeCommand) {
if (rtengine::settings->verbose) {
std::cout << "Launching external editor as native command." << std::endl;
}
const Glib::ustring command = editorInfo->get_commandline();
const Glib::ustring command = editorInfo.commandline;
return openInCustomEditor(fileName, &command);
}
@ -361,7 +361,10 @@ bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const Gli
bool success = false;
try {
success = editorInfo->launch(Gio::File::create_for_path(fileName));
Glib::RefPtr<Gio::AppInfo> appInfo =
Gio::AppInfo::create_from_commandline(
editorInfo.commandline, editorInfo.name, Gio::APP_INFO_CREATE_NONE);
success = appInfo->launch(Gio::File::create_for_path(fileName));
} catch (const Glib::Error &e) {
std::cerr
<< "Error launching external editor.\n"
@ -377,7 +380,7 @@ bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const Gli
if (rtengine::settings->verbose) {
std::cout << "Unable to launch external editor with Gio. Trying custom launcher." << std::endl;
}
Glib::ustring command = editorInfo->get_commandline();
Glib::ustring command = editorInfo.commandline;
#if defined WIN32
if (command.length() > 2 && command[0] == '"' && command[command.length() - 1] == '"') {
command = command.substr(1, command.length() - 2);

View File

@ -42,6 +42,13 @@ struct ExtProgAction
bool execute (const std::vector<Glib::ustring>& fileNames) const;
};
struct EditorInfo
{
Glib::ustring name;
Glib::ustring commandline;
bool isNativeCommand;
};
// Stores all external programs that could be called by the user
class ExtProgStore
{
@ -70,7 +77,7 @@ public:
static bool openInGimp (const Glib::ustring& fileName);
static bool openInPhotoshop (const Glib::ustring& fileName);
static bool openInCustomEditor (const Glib::ustring& fileName, const Glib::ustring* command = nullptr);
static bool openInExternalEditor(const Glib::ustring &fileName, const Glib::RefPtr<Gio::AppInfo> &editorInfo, bool nativeCommand);
static bool openInExternalEditor(const Glib::ustring &fileName, const EditorInfo &editorInfo);
};
#define extProgStore ExtProgStore::getInstance()

View File

@ -20,6 +20,8 @@
#include <fstream>
#include <glib.h>
#include <iostream>
#include <utility>
#ifdef WIN32
#include <windows.h>
#include <winnls.h>
@ -28,6 +30,8 @@
#include <CoreFoundation/CoreFoundation.h>
#endif
#include "../rtengine/settings.h"
namespace
{
@ -162,6 +166,25 @@ void setGtkLanguage(const Glib::ustring &language)
}
TranslationMetadata::TranslationMetadata(std::map<std::string, std::string> &&metadata) :
metadata(std::move(metadata))
{
}
std::string TranslationMetadata::get(const std::string &key, const std::string &default_value) const
{
const auto found_entry = metadata.find(key);
if (found_entry == metadata.end()) {
return default_value;
}
return found_entry->second;
}
std::string TranslationMetadata::getLanguageName(const std::string &default_name) const
{
return get("LANGUAGE_DISPLAY_NAME", default_name);
}
MultiLangMgr langMgr;
MultiLangMgr::MultiLangMgr ()
@ -219,6 +242,77 @@ Glib::ustring MultiLangMgr::getStr (const std::string& key) const
return key;
}
const TranslationMetadata *MultiLangMgr::getMetadata(const Glib::ustring &fname) const
{
static const char comment_symbol = '#';
static const char *space_chars = " \t";
static const char var_symbol = '@';
static const char key_value_separator = '=';
// Look for the metadata in the cache.
const auto &found_metadata = lang_files_metadata.find(fname);
if (found_metadata != lang_files_metadata.end()) {
return &found_metadata->second;
}
std::ifstream file(fname.c_str());
if (!file.is_open()) {
if (rtengine::settings->verbose) {
std::cerr << "Unable to open language file " << fname << " to get metadata." << std::endl;
}
return nullptr;
}
if (rtengine::settings->verbose) {
std::cout << "Reading metadata from language file " << fname << std::endl;
}
std::map<std::string, std::string> raw_metadata;
const auto read_key_value = [&raw_metadata](const std::string &meta_line) {
// One metadata key-value pair per line. The format is as follows:
// #001 @KEY=VALUE
// The line must begin with the comment symbol (#). After the first
// sequence of whitespace characters, the metadata variable symbol (@)
// must appear. It is followed immediately with the key name. The end of
// the key name is marked with the equal sign (=). All remaining
// characters until the end of the line make up the metadata value.
if (meta_line.empty() || meta_line.front() != comment_symbol) {
return;
}
const auto first_space = meta_line.find_first_of(space_chars, 1);
if (first_space == std::string::npos) {
return;
}
const auto definition_start = meta_line.find_first_not_of(space_chars, first_space + 1);
if (definition_start == std::string::npos || meta_line[definition_start] != var_symbol) {
return;
}
const auto separator_pos = meta_line.find(key_value_separator, definition_start + 1);
if (separator_pos == std::string::npos) {
return;
}
std::string key = meta_line.substr(definition_start + 1, separator_pos - definition_start - 1);
std::string value = meta_line.substr(separator_pos + 1);
if (rtengine::settings->verbose) {
std::cout << "Found metadata key " << key << " with value " << value << std::endl;
}
raw_metadata.emplace(std::move(key), std::move(value));
};
// Read lines in order. Metadata only appear in the first section of each
// file.
for (
std::string line;
std::getline(file, line) && (line.empty() ||
line.front() == comment_symbol ||
line.find_first_not_of(space_chars) == std::string::npos);) {
read_key_value(line);
}
// Add metadata to cache and return.
lang_files_metadata[fname] = TranslationMetadata(std::move(raw_metadata));
return &lang_files_metadata[fname];
}
bool MultiLangMgr::isOSLanguageDetectSupported ()
{
#if defined (WIN32) || defined (__linux__) || defined (__APPLE__)

View File

@ -24,6 +24,25 @@
#include <glibmm/ustring.h>
class TranslationMetadata
{
public:
TranslationMetadata() = default;
~TranslationMetadata() = default;
TranslationMetadata(const TranslationMetadata &other) = delete;
TranslationMetadata(TranslationMetadata &&other) = delete;
explicit TranslationMetadata(std::map<std::string, std::string> &&metadata);
TranslationMetadata &operator =(const TranslationMetadata &other) = delete;
TranslationMetadata &operator =(TranslationMetadata &&other) noexcept = default;
std::string get(const std::string &key, const std::string &default_value) const;
std::string getLanguageName(const std::string &default_name) const;
private:
std::map<std::string, std::string> metadata;
};
class MultiLangMgr
{
public:
@ -31,11 +50,13 @@ public:
void load(const Glib::ustring &language, const std::vector<Glib::ustring> &fnames);
Glib::ustring getStr(const std::string& key) const;
const TranslationMetadata *getMetadata(const Glib::ustring &fname) const;
static bool isOSLanguageDetectSupported();
static Glib::ustring getOSUserLanguage();
private:
std::map<std::string, Glib::ustring> translations;
mutable std::map<Glib::ustring, TranslationMetadata> lang_files_metadata;
};
extern MultiLangMgr langMgr;

View File

@ -106,9 +106,32 @@ void PlacesBrowser::refreshPlacesList ()
{
placesModel->clear ();
// append favorites
for (size_t i = 0; i < options.favoriteDirs.size(); i++) {
Glib::RefPtr<Gio::File> fav = Gio::File::create_for_path (options.favoriteDirs[i]);
if (fav && fav->query_exists()) {
try {
if (auto info = fav->query_info ()) {
Gtk::TreeModel::Row newrow = *(placesModel->append());
newrow[placesColumns.label] = info->get_display_name ();
newrow[placesColumns.icon] = info->get_icon ();
newrow[placesColumns.root] = fav->get_parse_name ();
newrow[placesColumns.type] = 5;
newrow[placesColumns.rowSeparator] = false;
}
} catch(Gio::Error&) {}
}
}
// append home directory
Glib::RefPtr<Gio::File> hfile = Gio::File::create_for_path (userHomeDir()); // Will send back "My documents" on Windows now, which has no restricted access
if (!placesModel->children().empty()) {
Gtk::TreeModel::Row newrow = *(placesModel->append());
newrow[placesColumns.rowSeparator] = true;
}
if (hfile && hfile->query_exists()) {
try {
if (auto info = hfile->query_info ()) {
@ -223,29 +246,6 @@ void PlacesBrowser::refreshPlacesList ()
newrow[placesColumns.rowSeparator] = false;
}
}
// append favorites
if (!placesModel->children().empty()) {
Gtk::TreeModel::Row newrow = *(placesModel->append());
newrow[placesColumns.rowSeparator] = true;
}
for (size_t i = 0; i < options.favoriteDirs.size(); i++) {
Glib::RefPtr<Gio::File> fav = Gio::File::create_for_path (options.favoriteDirs[i]);
if (fav && fav->query_exists()) {
try {
if (auto info = fav->query_info ()) {
Gtk::TreeModel::Row newrow = *(placesModel->append());
newrow[placesColumns.label] = info->get_display_name ();
newrow[placesColumns.icon] = info->get_icon ();
newrow[placesColumns.root] = fav->get_parse_name ();
newrow[placesColumns.type] = 5;
newrow[placesColumns.rowSeparator] = false;
}
} catch(Gio::Error&) {}
}
}
}
bool PlacesBrowser::rowSeparatorFunc (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::iterator& iter)

View File

@ -136,6 +136,21 @@ bool PopUpCommon::insertEntryImpl(int position, const Glib::ustring& fileName, c
return true;
}
void PopUpCommon::setEmptyImage(const Glib::ustring &fileName)
{
emptyImageFilename = fileName;
if (getEntryCount()) {
return;
}
if (fileName.empty()) {
buttonImage->hide();
} else {
changeImage(emptyImageFilename, Glib::RefPtr<const Gio::Icon>());
buttonImage->show();
}
}
void PopUpCommon::removeEntry(int position)
{
if (position < 0 || position >= getEntryCount()) {
@ -147,8 +162,13 @@ void PopUpCommon::removeEntry(int position)
button->get_style_context()->remove_class("Left");
arrowButton->hide();
hasMenu = false;
// Remove the button image.
buttonImage->hide();
if (emptyImageFilename.empty()) {
// Remove the button image.
buttonImage->hide();
} else {
// Show the empty icon.
changeImage(emptyImageFilename, Glib::RefPtr<const Gio::Icon>());
}
selected = -1;
}
else if (position < selected) {

View File

@ -64,6 +64,8 @@ public:
bool addEntry (const Glib::ustring& fileName, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup = nullptr);
bool insertEntry(int position, const Glib::ustring& fileName, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup = nullptr);
bool insertEntry(int position, const Glib::RefPtr<const Gio::Icon>& gIcon, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup = nullptr);
/// Sets the button image to show when there are no entries.
void setEmptyImage(const Glib::ustring &fileName);
int getEntryCount () const;
bool setSelected (int entryNum);
int getSelected () const;
@ -77,6 +79,7 @@ private:
type_signal_changed messageChanged;
type_signal_item_selected messageItemSelected;
Glib::ustring emptyImageFilename;
std::vector<Glib::RefPtr<const Gio::Icon>> imageIcons;
std::vector<Glib::ustring> imageFilenames;
std::vector<const RTImage*> images;

View File

@ -16,21 +16,27 @@
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
*/
#include <sstream>
#include <glibmm/miscutils.h>
#include <glibmm/ustring.h>
#include <sigc++/slot.h>
#include "externaleditorpreferences.h"
#include "preferences.h"
#include "multilangmgr.h"
#include "splash.h"
#include "cachemanager.h"
#include "addsetids.h"
#include "cachemanager.h"
#include "externaleditorpreferences.h"
#include "multilangmgr.h"
#include "preferences.h"
#include "rtimage.h"
#include "rtwindow.h"
#include "splash.h"
#include "toollocationpref.h"
#include "../rtengine/dfmanager.h"
#include "../rtengine/ffmanager.h"
#include "../rtengine/iccstore.h"
#include "../rtengine/procparams.h"
#include <sstream>
#include "rtimage.h"
#include "rtwindow.h"
#include "toollocationpref.h"
#ifdef _OPENMP
#include <omp.h>
#endif
@ -1139,9 +1145,14 @@ Gtk::Widget* Preferences::getGeneralPanel()
std::vector<Glib::ustring> langs;
parseDir(argv0 + "/languages", langs, "");
for (size_t i = 0; i < langs.size(); i++) {
if ("default" != langs[i] && "README" != langs[i] && "LICENSE" != langs[i]) {
languages->append(langs[i]);
for (const auto &lang : langs) {
if ("default" != lang && "README" != lang && "LICENSE" != lang) {
auto lang_metadata = langMgr.getMetadata(Glib::build_filename(argv0 + "/languages", lang));
const auto &display_name =
lang_metadata != nullptr
? Glib::ustring(lang_metadata->getLanguageName(lang))
: lang;
languages->append(lang, display_name);
}
}
@ -1765,7 +1776,7 @@ void Preferences::storePreferences()
moptions.menuGroupExtProg = ckbmenuGroupExtProg->get_active();
moptions.highlightThreshold = (int)hlThresh->get_value();
moptions.shadowThreshold = (int)shThresh->get_value();
moptions.language = languages->get_active_text();
moptions.language = languages->get_active_id();
moptions.languageAutoDetect = ckbLangAutoDetect->get_active();
moptions.theme = themeFNames.at (themeCBT->get_active_row_number ()).longFName;
@ -1799,7 +1810,12 @@ void Preferences::storePreferences()
const std::vector<ExternalEditorPreferences::EditorInfo> &editors = externalEditors->getEditors();
moptions.externalEditors.resize(editors.size());
moptions.externalEditorIndex = -1;
moptions.externalEditorIndex =
#ifdef __APPLE__
editors.empty() ? -1 : 0;
#else
-1;
#endif
for (unsigned i = 0; i < editors.size(); i++) {
moptions.externalEditors[i] = (ExternalEditor(
editors[i].name, editors[i].command, editors[i].native_command, editors[i].icon_serialized));
@ -2046,7 +2062,7 @@ void Preferences::fillPreferences()
}
cprevdemo->set_active (moptions.prevdemo);
languages->set_active_text(moptions.language);
languages->set_active_id(moptions.language);
ckbLangAutoDetect->set_active(moptions.languageAutoDetect);
int themeNbr = getThemeRowNumber(moptions.theme);
themeCBT->set_active (themeNbr == -1 ? 0 : themeNbr);

View File

@ -9,11 +9,11 @@
# - GTK_PREFIX
# Formatting
fNormal="$(tput sgr0)" >/dev/null 2>&1
fBold="$(tput bold)" >/dev/null 2>&1
fNormal="$(printf "\e[0m")"
fBold="$(printf "\e[1m")"
# Colors depend upon the user's terminal emulator color scheme - what is readable for you may be not readable for someone else.
fMagenta="$(tput setaf 5)" >/dev/null 2>&1
fRed="$(tput setaf 1)" >/dev/null 2>&1
fMagenta="$(printf "\e[1;35m")"
fRed="$(printf "\e[1;31m")"
function msg {
printf "\\n${fBold}-- %s${fNormal}\\n" "${@}"
@ -448,7 +448,7 @@ function CreateDmg {
msg "Zipping disk image for redistribution:"
mkdir "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder"
cp {"${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.dmg","${PROJECT_NAME}.app/Contents/MacOS/rawtherapee-cli","${PROJECT_SOURCE_DATA_DIR}/INSTALL.readme.rtf"} "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder"
codesign -s - -i com.rawtherapee.rawtherapee-cli -f "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/rawtherapee-cli"
codesign -s "${CODESIGNID}" -i com.rawtherapee.rawtherapee-cli -f "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/rawtherapee-cli"
zip -r "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.zip" "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/"
if [[ -n $NIGHTLY ]]; then
cp "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.zip" "${PROJECT_NAME}_macOS_${arch}_latest.zip"