55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | #!/bin/bash
 | ||
|  | 
 | ||
|  | merge_po_files_preserve_format() { | ||
|  |     base_file="base.po" | ||
|  |     new_file="new.po" | ||
|  |     output_file="output.po" | ||
|  | 
 | ||
|  |     declare -A new_translations | ||
|  | 
 | ||
|  |     # Read new_file and extract msgid and msgstr | ||
|  |     msgid="" | ||
|  |     while IFS= read -r line; do | ||
|  |         if [[ $line == msgid* ]]; then | ||
|  |             msgid="$line" | ||
|  |             msgstr="" | ||
|  |         elif [[ $line == msgstr* ]]; then | ||
|  |             msgstr="$line" | ||
|  |             new_translations["$msgid"]="$msgstr" | ||
|  |         elif [[ $line == "\"\"" ]]; then | ||
|  |             msgid+="$line" | ||
|  |         fi | ||
|  |     done < "$new_file" | ||
|  | 
 | ||
|  |     # Open output_file and write merged content | ||
|  |     msgid="" | ||
|  |     while IFS= read -r line; do | ||
|  |         if [[ $line == msgid* ]]; then | ||
|  |             msgid="$line" | ||
|  |             msgstr="" | ||
|  |         elif [[ $line == msgstr* ]]; then | ||
|  |             msgstr="$line" | ||
|  |             if [[ -n ${new_translations["$msgid"]} ]]; then | ||
|  |                 echo "$msgid" >> "$output_file" | ||
|  |                 echo "${new_translations["$msgid"]}" >> "$output_file" | ||
|  |             else | ||
|  |                 echo "$msgid" >> "$output_file" | ||
|  |                 echo "$msgstr" >> "$output_file" | ||
|  |             fi | ||
|  |             msgid="" | ||
|  |             msgstr="" | ||
|  |         elif [[ $line == "\"\"" ]]; then | ||
|  |             msgid+="$line" | ||
|  |         else | ||
|  |             echo "$line" >> "$output_file" | ||
|  |         fi | ||
|  |     done < "$base_file" | ||
|  | } | ||
|  | 
 | ||
|  | if [[ $# -ne 3 ]]; then | ||
|  |     echo "Usage: $0 base_file new_file output_file" | ||
|  |     exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | merge_po_files_preserve_format "base.po" "new.po" "output.po" |