What are the limitations of using constants in PHP for language translation, especially when dealing with different word forms or complex translations?

Using constants for language translation in PHP can be limiting when dealing with different word forms or complex translations that require dynamic values. To solve this issue, you can use a more flexible approach like using arrays to store translations with placeholders for dynamic values. This allows for more dynamic and customizable translations based on the context.

// Define translations as an associative array
$translations = [
    'welcome' => 'Welcome, :name!',
    'error' => 'An error occurred: :message',
];

// Function to translate a key with dynamic values
function translate($key, $values = []) {
    global $translations;
    
    if (isset($translations[$key])) {
        $translation = $translations[$key];
        
        // Replace placeholders with dynamic values
        foreach ($values as $placeholder => $value) {
            $translation = str_replace(':' . $placeholder, $value, $translation);
        }
        
        return $translation;
    }
    
    return 'Translation not found';
}

// Example usage
echo translate('welcome', ['name' => 'John']); // Output: Welcome, John!
echo translate('error', ['message' => 'Something went wrong']); // Output: An error occurred: Something went wrong