AppFlowy/frontend/scripts/white_label/i18n_white_label.sh

103 lines
3.3 KiB
Bash

#!/bin/bash
show_usage() {
echo "Usage: $0 [options]"
echo "Options:"
echo " --company-name Set the custom company name"
echo " --help Show this help message"
echo ""
echo "Example:"
echo " $0 --company-name \"MyCompany Ltd.\""
}
CUSTOM_COMPANY_NAME=""
I18N_DIR="resources/translations"
while [[ $# -gt 0 ]]; do
case $1 in
--company-name)
CUSTOM_COMPANY_NAME="$2"
shift 2
;;
--help)
show_usage
exit 0
;;
*)
echo "Unknown option: $1"
show_usage
exit 1
;;
esac
done
if [ -z "$CUSTOM_COMPANY_NAME" ]; then
echo "Error: Company name is required"
show_usage
exit 1
fi
if [ ! -d "$I18N_DIR" ]; then
echo "Error: Translation directory not found at $I18N_DIR"
exit 1
fi
echo "Replacing 'AppFlowy' with '$CUSTOM_COMPANY_NAME' in translation files..."
if sed --version >/dev/null 2>&1; then
SED_INPLACE="-i"
else
SED_INPLACE="-i ''"
fi
echo "Processing translation files..."
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
# Check if directory exists and has JSON files
if [ ! -d "$I18N_DIR" ] || [ -z "$(ls -A "$I18N_DIR"/*.json 2>/dev/null)" ]; then
echo "Error: No JSON files found in $I18N_DIR directory"
exit 1
fi
# Process each JSON file in the directory
for file in "$I18N_DIR"/*.json; do
echo "Updating $(basename "$file")"
# Use jq to replace AppFlowy with custom company name in values only
if command -v jq >/dev/null 2>&1; then
# Create a temporary file for the transformation
jq --arg company "$CUSTOM_COMPANY_NAME" 'walk(if type == "string" then gsub("AppFlowy"; $company) else . end)' "$file" > "${file}.tmp"
# Check if transformation was successful
if [ $? -eq 0 ]; then
mv "${file}.tmp" "$file"
else
echo "Error: Failed to process $file with jq"
rm -f "${file}.tmp"
exit 1
fi
else
# Fallback to sed if jq is not available
# First, escape any special characters in the company name
ESCAPED_COMPANY_NAME=$(echo "$CUSTOM_COMPANY_NAME" | sed 's/[\/&]/\\&/g')
# Replace AppFlowy with the custom company name in JSON values
sed $SED_INPLACE 's/\(".*"\): *"\(.*\)AppFlowy\(.*\)"/\1: "\2'"$ESCAPED_COMPANY_NAME"'\3"/g' "$file"
if [ $? -ne 0 ]; then
echo "Error: Failed to process $file with sed"
exit 1
fi
fi
done
else
for file in $(find "$I18N_DIR" -name "*.json" -type f); do
echo "Updating $(basename "$file")"
# Use jq to only replace values, not keys
if command -v jq >/dev/null 2>&1; then
jq 'walk(if type == "string" then gsub("AppFlowy"; "'"$CUSTOM_COMPANY_NAME"'") else . end)' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
else
# Fallback to sed with a more specific pattern that targets values but not keys
sed $SED_INPLACE 's/: *"[^"]*AppFlowy[^"]*"/: "&"/g; s/: *"&"/: "'"$CUSTOM_COMPANY_NAME"'"/g' "$file"
# Fix any double colons that might have been introduced
sed $SED_INPLACE 's/: *: */: /g' "$file"
fi
done
fi
echo "Replacement complete!"