Дело в том, что ваш GraphFeatureNumbersetRange является подклассом NSObject. Что в свою очередь уже соответствует CustomStringConvertible! Это оно! Просто удалите этот избыточный протокол. Теперь вы объявляете это дважды! : -)
Я всегда использовал файлы ресурсов для многоязычных приложений.
многих статей о сети, объясняющей, как использовать их.
я использовал два различных пути:
файл ресурсов / форма, легче реализовать, только необходимо ввести значения в файл ресурсов, но я нахожу, что этот подход тяжелее поддерживает, так как маркировки рассеиваются всюду по приложению.
глобальный файл ресурсов позволяет Вам централизовать все маркировки (изображения и т.д.) в одном файле (на язык), но это означает вручную устанавливать маркировки в загрузке формы. Этот файл может также использоваться для сообщений об ошибках и т.д.
вопрос об А вкуса...
Одна последняя точка, я пишу программы в английском и французском языке, я использую "en" и "франк" и не "en-США" и "FR франка". Не усложняйте вещи, различные dilelects английского языка (американец, англичане, австралиец и т.д.) имеют небольшое количество достаточно различий для использования только одного (то же идет для французского языка).
Я недавно записал программу и с немецким языком и с поддержкой на английском языке. Я был удивлен узнать, что, если я просто назвал свои английские ресурсы LanguageResources.resx и свои немецкие ресурсы LanguageResources.de.resx, он автоматически выбрал корректный язык. ResXFileCodeGenerator заботился обо всем этом для меня.
Примечание, что поля в этих двух файлах не были тем же и любым еще, вошло, немецкие поля обнаружатся в приложении как английский язык как большинство не, определенный мудрый язык файла является файлом по умолчанию. При поиске строки это идет от самого определенного (исключая .de-DE.resx) к наименее определенному (напр. .resx).
Для достигания строк используют ResourceManager. GetString или ResourceManager. Вызовы GetObject. Приложение должно дать Вам ResourceManager бесплатно.