列挙型


AttributeScopes.FoundationAttributes
.AgreementConceptAttribute


ローカライズされた文字列内の引数との文法上の一致を表す属性。


iOS 17.0+ iPadOS 17.0+ macOS 14.0+ Mac Catalyst 17.0+

tvOS 17.0+ watchOS 10.0+ visionOS 1.0+ Xcode 15.0+

@frozen
enum
AgreementArgumentAttribute






概観


この書式設定属性は、語形変化したテキストの一部ではない住所または語句に基づいてテキストを語形変化させる必要がある場合に使用します。


呼び名の語句に一致する


性別に依存する言語では、文内の単語やフレーズが文法的に一致している必要があります。たとえば、以下の文をスペイン語に翻訳する必要があるとします。「Anne is busy(アンは忙しいです。)」


問題は、システムがAnne (アン)という名前の人に望ましい呼び名を認識していないことです。さらに、ほとんどの場合、ローカリゼーションファイルには翻訳された単語の男性形のみが含まれています。これは、システムがアンの女性名に合わせて、「busy(忙しい」などの他の単語を文中で正しく活用できないことを意味します。したがって、結果の翻訳は次のようになります: Anne está occupado. Ocupado は男性的ですが、これは文の正しい性別一致ではありません。


ここで、agreeWithConcept 属性が役に立ちます。一致を求める単語 ocupado を、InflectionConcept.termsOfAddress(_:) 型の変形概念を指す acceptWithConcept 属性で包み込むことにより、システムは男性単語 ocupadofeminine 用語の呼び名 Anne と一致させます。翻訳された単語の男性形と女性形をローカリゼーションファイルに含める必要はありません。システムが条件に一致します。


以下の手順により、翻訳時に適切な性別の一致が得られます。


  1. Anne(アン)という名前を feminine の呼び名に関連した型を作成します。たとえば、2 つのプロパティを含む Contact 構造体を作成します。1 つはアンの名前を表し、もう 1 つ(配列)はアンの好ましい呼び名を表します。
  2. 翻訳すべきスペイン語ローカリゼーションファイルから英語のキーフレーズを含む LocalizedStringResource を作成し、一致する単語を表すプレースホルダー変数として Anne という名前を含めます。

  3. AttributedString.LocalizationOptions のインスタンスを作成し、Anne という名前に関連した呼び名の用語を含む InflectionConcept.termsOfAddress(_:) 型の語形変化概念をその concepts プロパティに渡します。

  4. スペイン語ローカリゼーションファイルでは、concepts プロパティの最初の語形変化概念インスタンスを指すインデックスで、スペイン語の用語 ocupadoacceptWithConcept 属性で包み込みます。

  5. 次に、リソースとオプションを新しい AttributedString に渡して、男性語の ocupado を女性形の ocupada に変化させます。

  1. struct Contact {
  2. let name: String
  3. let termsOfAddress: [TermOfAddress]
  4. }
  5. let contact = Contact(name: "Anne", termsOfAddress: [.feminine])
  6. // Define the resource you want to apply grammatical agreement to.
  7. let resource = LocalizedStringResource("\(contact.name) is busy.")
  8. // Set the inflection concept to use a term of address.
  9. var options = AttributedString.LocalizationOptions()
  10. options.concepts = [.termsOfAddress(contact.termsOfAddress)]
  11. // ____________
  12. // In the Spanish localization file:
  13. // "%@ is busy." = "%@ está ^[ocupado](agreeWithConcept: 1)."
  14. // ____________
  15. // Make a new string imposing grammatical agreement on the resource from the term of address.
  16. let result = AttributedString(localized: resource, options: options)
  17. // result == "Anne está ocupada."


ローカライズされたフレーズに一致


文法上の一致のためにローカライズされたフレーズを使用することは、呼び名の語句の代わりに InflectionConcept.localizedPhrase(_:) を語形変化することを除いて、呼び名の語句を使用することと同じです。


たとえば、食品の注文に関する以下の文をスペイン語に翻訳する必要があるとします。「Last time you ordered the small(前回は小を注文しました。)」


英語では、small という単語が単独で現れることがあります。しかし、スペイン語では、翻訳された単語は、それが説明している男性名詞または女性名詞と一致する必要があり、この場合(ensalada) は文の一部ではありません。


一致を得るには、small を意味する男性語 pequeñoagreeWithConcept 属性で包み込みます。次に、関連する食品項目と一致する InflectionConcept.localizedPhrase(_:) を指すように設定します。


以下の手順により、翻訳時に適切な性別の一致が得られます。