From c80a8ac1bd87c5b4209cd1c2ab27d8df1be53d0b Mon Sep 17 00:00:00 2001 From: XSQRL Date: Wed, 7 Jan 2026 22:57:11 +0100 Subject: [PATCH] Fixed german locale settings on my system --- .gitignore | 2 +- beitragsquittung.rb | 25 ++++++++++++++++++++++--- document.tex | 7 +++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 696737c..22e3720 100644 --- a/.gitignore +++ b/.gitignore @@ -17,5 +17,5 @@ document.pdf *.fdb_latexmk *.fls *.synctex.gz -ccl_mitgliederdatenbank.xlsx +*.xlsx signature.png \ No newline at end of file diff --git a/beitragsquittung.rb b/beitragsquittung.rb index 01c0376..a9d6883 100755 --- a/beitragsquittung.rb +++ b/beitragsquittung.rb @@ -3,6 +3,22 @@ require 'cmxl' # for parsing the MT940 file require 'roo' # for parsing the Excel file require 'humanize' # for converting numbers to words +# set process locale (affects strftime, number formatting via locales) +ENV['LANG'] = 'de_DE.UTF-8' +ENV['LC_ALL'] ||= 'de_DE.UTF-8' + +# date +def german_date(d); d.strftime("%d.%m.%Y"); end + +# number +def german_number(n) + parts = sprintf("%.2f", n).split('.') + parts[0] = parts[0].gsub(/(?<=\d)(?=(?:\d{3})+$)/, '.') + parts.join(',') +end + + + Humanize.configure do |config| config.default_locale = :de # [:en, :es, :fr, :tr, :de, :id], default: :en config.decimals_as = :number # [:digits, :number], default: :digits @@ -16,10 +32,13 @@ def generate_reciept(mitgliedsnummer, name, vorname, strasse, hausnummer, plz, o puts "Generating reciept for #{mitgliedsnummer} #{name} #{vorname} #{strasse} #{hausnummer} #{plz} #{ort} #{betrag} #{betrag_in_worten} #{start_datum} #{end_datum}" # create a csv file with the payments - CSV.open("payments.csv", "wb") do |csv| + # CSV.open("payments.csv", "wb") do |csv| + # CSV.open("payments.csv", "wb", col_sep: ";", encoding: "UTF-8") do |csv| + # CSV.open("payments.csv", "wb", encoding: "UTF-8", force_quotes: true) do |csv| + CSV.open("payments.csv", "wb", col_sep: "\t", force_quotes: false, encoding: "UTF-8") do |csv| csv << ["datum", "betrag", "type", "verzicht"] payments.each do |payment| - csv << [payment[:date], payment[:amount], payment[:type], payment[:verzicht]] + csv << [german_date(payment[:date]), german_number(payment[:amount]), payment[:type], payment[:verzicht]] end end @@ -138,5 +157,5 @@ else puts member = get_member_details_from_mitgliedsnummer(mitgliedsnummer) - generate_reciept(mitgliedsnummer, member[:name], member[:vorname], member[:strasse], member[:hausnummer], member[:plz], member[:ort], total_payment, betrag_in_worten, start_datum, end_datum, payments) + generate_reciept(mitgliedsnummer, member[:name], member[:vorname], member[:strasse], member[:hausnummer], member[:plz], member[:ort], german_number(total_payment), betrag_in_worten, start_datum, end_datum, payments) end diff --git a/document.tex b/document.tex index 4f90900..5b63ea4 100644 --- a/document.tex +++ b/document.tex @@ -4,11 +4,13 @@ \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{% - ngerman, ae, times, %% hier kann man die Schriftart einstellen graphicx, url} +\usepackage[ngerman]{babel} +\usepackage[ngerman]{datetime} +\usepackage[locale=DE]{siunitx} \usepackage{eurosym} \usepackage{pdfpages} \usepackage{nopageno} @@ -35,7 +37,7 @@ backaddress=true,parskip=half,enlargefirstpage=true} 20457 Hamburg} % hier die Signatur einsetzen: -\setkomavar{signature}{Paul Jost} +\setkomavar{signature}{Sebastian Hinz} % hier betreff einsetzen \setkomavar{subject}{Sammelbestätigung über Mitgliedsbeiträge} @@ -107,6 +109,7 @@ nach § 60a Abs. 1 AO länger als 3 Jahre seit Ausstellung des Bescheides zurüc %\csvautotabular{payments.csv} \footnotesize \csvreader[ + separator=tab, tabular=|l|l|l|l|, table head=\hline \thead{ Datum der Zuwendung} & \thead{Art der Zuwendung \\ (Geldzuwendung/Mitgliedsbeitrag)} & \thead{Verzicht auf die Erstattung\\ von Aufwendungen (ja/nein)} & Betrag\\\hline, late after line=\\\hline,