วิธีการใช้เชิงมุม 9 $ จำกัด วงด้วยพหูพจน์


10

ตั้งแต่ Angular 9 เราสามารถใช้

$localize`Hello ${name}:name:`

สำหรับ i18n ในรหัส typescript สิ่งนี้ยังคงมีข้อ จำกัด บางประการเนื่องจากng xi18nคำสั่งตรวจไม่พบสตริง แต่หากข้อความเหล่านี้ถูกเพิ่มเข้าไปในไฟล์การแปลด้วยตนเอง

$localizeฟังก์ชั่นเป็นเอกสารที่ค่อนข้างดีในJSDoc ในแหล่งที่มาแต่ก็ไม่ได้อธิบายวิธีการทำงานกับพหูพจน์ สิ่งที่ฉันหมายถึงคือสิ่งนี้ (รหัสเทียม):

$localize`Hello {${count}, plural, =1 {reader} other {readers}}`

เป็นไปได้ด้วย$localizeหรือไม่ ถ้าใช่: อย่างไร ถ้าไม่: Angular รวบรวมนิพจน์ดังกล่าวจาก HTML เป็น TypeScript ได้อย่างไร


สิ่งนี้ช่วยคุณได้<span i18n>Updated {minutes, plural, =0 {just now} =1 {one minute ago} other {{{minutes}} minutes ago}}</span>ไหม นั่นคือในเอกสาร ค่อนข้างคล้ายกับสิ่งที่คุณต้องการ
เดฟบาทหลวง

@DavePastor: ใช่ฉันพยายามแล้ว ฉันเปลี่ยนมันในคำถามตอนนี้ อย่างไรก็ตามมันเป็นรหัสหลอกเพียงเพื่อแสดงให้เห็นถึงสิ่งที่ฉันต้องการเพื่อให้บรรลุ
yankee

@DavePastor: (เกี่ยวกับความคิดเห็นที่สอง): ไม่สิ่งนี้ไม่ได้ช่วย นี่คือ HTML ไม่ใช่ TypeScript
yankee

ตกลงดังนั้นคุณต้องการจัดการเรื่องนี้ในฝั่ง TS เข้าใจแล้ว
เดฟบาทหลวง

ตรวจสอบบล็อก
Dave Pastor

คำตอบ:


2

สำหรับตอนนี้มันเป็นไปไม่ได้ที่จะใช้ ICUs กับ$localizeที่กล่าวไว้ในนี้ปัญหา GitHub จากความคิดเห็นที่ผ่านมาดูเหมือนว่าทีมงานเชิงมุมกำลังพิจารณาถ้ามันยังคงมีน้ำหนักเบา

วิธีแก้ปัญหาที่แนะนำคือการสร้างวิธีการช่วยเหลือของคุณเองที่ส่งคืนการแปลที่ถูกต้องตามพารามิเตอร์การนับ

    title = $localize `Hi ${this.name}! You have ${
        plural(this.users.length. {
          0: $localize `no users`,
          1: $localize `one user`,
          other: $localize`${this.users.length} users`,
    }.`

    function plural(value, options) {
      // Handle 0, 1, ... cases
      const directResult = options[value];
      if (directResult !== undefined) { return directResult; }
      // handle zero, one, two, few, many
      // ...
      return options.other;
    } 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.