Translations are hard. GetText is an often overlooked solution, but it has many advantages. These slides are a bit old but still relevant. They have some details about translations horror stories: before choosing any I18N solution, match these against your prospective answers.