i18n-array-groq-query-migration

โดย sanity-io

ตรวจจับและอัปเดตรูปแบบ GROQ แบบเก่าที่อ่านภาษาจาก _key สำหรับ sanity-plugin-internationalized-array เมื่อผู้ใช้พูดถึงการย้ายจาก v4 ไป v5 หรือ…

npx skills add https://github.com/sanity-io/plugins --skill i18n-array-groq-query-migration

Internationalized Array GROQ Migration

Goal

Help users find GROQ queries that still read locale from _key and rewrite them safely for v5.

When To Use

Use this skill when a user asks to:

  • migrate sanity-plugin-internationalized-array from v4 to v5
  • migrate @sanity/document-internationalization from v5 to v6 alongside sanity-plugin-internationalized-array language field changes
  • find queries that still use _key for language lookup
  • update GROQ filters like _key == "en" or _key == $language

Detection Workflow

Detection commands below use grep. If your environment differs, use your editor's global search with equivalent patterns.

  1. Search for direct language comparisons on _key:
grep -REn --exclude-dir=node_modules "_key[[:space:]]*==[[:space:]]*(\"[^\"]+\"|'[^']+'|\\$[A-Za-z_][A-Za-z0-9_]*)" .
  1. Search for any localized-array filters that mention _key:
grep -REn --exclude-dir=node_modules "\[[^]]*_key[^]]*\]" .
  1. Prioritize matches that look like localized-value reads, for example:
  • field[_key == ...][0].value
  • select(...) branches that compare _key to a language value
  1. Check for uses of groq and verify if they use _key as the language, if it is using it, update them.

  2. Explicitly check for template-interpolated language expressions and keep the same operand, for example:

    • _key == "${language}"
    • _key == "${locale}"
  3. Review each match to avoid false positives where _key is used for unrelated array item identity.

Rewrite Rules

Use the same language operand from the original query. The language operand can be a string literal (for example "en"), a variable (for example $language), or a template-interpolated expression (for example "${language}").

  • Before data migration is executed (backwards compatible):
    • _key == <languageExpr> -> language == <languageExpr> || _key == <languageExpr>
  • After migration is complete:
    • language == <languageExpr> || _key == <languageExpr> -> language == <languageExpr>

Examples

Legacy:

*[_type == "person"]{
  "greeting": greeting[_key == $language][0].value
}

Backwards compatible:

*[_type == "person"]{
  "greeting": greeting[language == $language || _key == $language][0].value
}

Post-migration final form:

*[_type == "person"]{
  "greeting": greeting[language == $language][0].value
}

Response Template

When reporting findings to a user:

  1. List each query location that still uses _key as language source.
  2. Show the exact replacement using the same language expression.
  3. Label each replacement as:
    • backwards-compatible (pre-migration), or
    • final (post-migration complete).
  4. Label each match category as runtime, docs/example, or ambiguous.
  5. Call out any ambiguous _key usage that needs manual review.

Skills เพิ่มเติมจาก sanity-io

tdd
sanity-io
การพัฒนาที่ขับเคลื่อนด้วยการทดสอบด้วยวงจรแดง-เขียว-ปรับปรุง ใช้เมื่อผู้ใช้ต้องการสร้างฟีเจอร์หรือแก้ไขบั๊กโดยใช้ TDD กล่าวถึง "แดง-เขียว-ปรับปรุง" ต้องการ...
performance-optimization
sanity-io
ปรับปรุงประสิทธิภาพการทำงานของแอปพลิเคชัน ใช้เมื่อมีข้อกำหนดด้านประสิทธิภาพ เมื่อสงสัยว่าประสิทธิภาพลดลง หรือเมื่อ Core Web Vitals หรือเวลาโหลด...
content-experimentation-best-practices
sanity-io
แนวทางที่มีโครงสร้างสำหรับการออกแบบ ดำเนินการ และวิเคราะห์การทดสอบเนื้อหาเพื่อปรับปรุงอัตราการแปลงและการมีส่วนร่วม ครอบคลุมกรอบสมมติฐาน การเลือกเมตริก การคำนวณขนาดตัวอย่าง และการทดสอบนัยสำคัญทางสถิติสำหรับการทดสอบแบบ A/B และหลายตัวแปร รวมถึงแหล่งข้อมูลโดยละเอียดเกี่ยวกับค่า p ช่วงความเชื่อมั่น การวิเคราะห์กำลัง และวิธีแบบเบย์สำหรับการตีความผลลัพธ์ มีรูปแบบการบูรณาการ CMS สำหรับจัดการตัวแปรในระดับฟิลด์และการเชื่อมต่อภายนอก...
content-modeling-best-practices
sanity-io
แนวทางการสร้างแบบจำลองเนื้อหาที่มีโครงสร้างสำหรับการออกแบบสคีมา ความสามารถในการนำกลับมาใช้ใหม่ และการส่งมอบเนื้อหาหลายช่องทาง ครอบคลุมหลักการสำคัญ: การจัดการเนื้อหาในฐานะข้อมูลมากกว่าหน้าเว็บ การรักษาแหล่งข้อมูลเดียวที่เชื่อถือได้ การออกแบบสำหรับช่องทางในอนาคต และการปรับปรุงขั้นตอนการทำงานของผู้เขียน รวมถึงกรอบการตัดสินใจสำหรับการอ้างอิงเทียบกับวัตถุที่ฝังตัว การแยกส่วนความรับผิดชอบ และรูปแบบการนำเนื้อหากลับมาใช้ใหม่ ให้คำแนะนำด้านอนุกรมวิธานและการจำแนกประเภทสำหรับแนวทางแบบราบ ลำดับชั้น และแบบแง่มุม ใช้ได้กับ...
portable-text-conversion
sanity-io
แปลงเนื้อหา HTML และ Markdown เป็นบล็อก Portable Text สำหรับ Sanity ใช้เมื่อย้ายเนื้อหาจาก CMS รุ่นเก่า นำเข้า HTML หรือ Markdown เข้าสู่ Sanity…
portable-text-serialization
sanity-io
เรนเดอร์และซีเรียลไลซ์ Portable Text เป็น React, Svelte, Vue, Astro, HTML, Markdown และข้อความธรรมดา ใช้เมื่อต้องการใช้งานการเรนเดอร์ Portable Text ในฟรอนต์เอนด์ใดๆ…
sanity-best-practices
sanity-io
แนวทางปฏิบัติที่ดีที่สุดและคู่มือการผสานรวมที่ครอบคลุมสำหรับการพัฒนา Sanity CMS ในหลากหลายเฟรมเวิร์กและหัวข้อ ครอบคลุมการผสานรวมเฟรมเวิร์กมากกว่า 10 รายการ รวมถึง Next.js, Nuxt, Astro, Remix, SvelteKit และ Angular พร้อมรูปแบบเฉพาะของเฟรมเวิร์กและคำแนะนำในการตั้งค่า รวมถึงคู่มือหัวข้อสำหรับการออกแบบสคีมา การปรับแต่งคิวรี GROQ, Visual Editing, Portable Text, รูปภาพ, TypeGen, การแปลภาษา และการย้ายเนื้อหา มีโครงสร้างอ้างอิงด่วนสำหรับโหลดเฉพาะคู่มือที่เกี่ยวข้องตามประเภทงาน...
sanity-migration
sanity-io
วางแผน ดำเนินการ และตรวจสอบการย้ายข้อมูลจากระบบ CMS และระบบเนื้อหาอื่น ๆ มาสู่ Sanity ใช้เมื่อต้องการย้ายหรือเปลี่ยนแพลตฟอร์มไปยัง Sanity จาก AEM, Adobe Experience Manager, Contentful, Strapi, Webflow, WordPress, Payload, Drupal, ไฟล์ Markdown/MDX/frontmatter, การส่งออก WXR/XML, API ของ CMS, การดัมพ์ฐานข้อมูล, HTML แบบคงที่ หรือเมื่อออกแบบขั้นตอนการทำงานสำหรับการสกัด การแปลง การแปลง Portable Text การย้ายสินทรัพย์ การเปลี่ยนเส้นทาง การตรวจสอบความถูกต้อง และการตัดโอเวอร์
data-analysisdatabasedevelopment