برنامه نویسی

استفاده از eslint برای رفع موارد استفاده اشتباه i18n

ما در Woovi به DX اهمیت زیادی می دهیم. ما می خواهیم بهترین گردش کار را پیدا کنیم تا توسعه دهندگان بتوانند با رشته های i18n کار کنند. به روز رسانی دستی کد و فایل های JSON محلی i18n کند و مستعد خطا است.

گردش کار فعلی ما پس از چندین بار تکرار به این صورت است:

  • رشته های i18n خود را با استفاده از t (‘key in English’) بنویسید، شما رشته را به انگلیسی بنویسید.
  • ما i18next-scanner را برای استخراج همه موارد استفاده می کنیم t در پایگاه کد
  • توسعه دهنده فقط باید ترجمه های پرتغالی و اسپانیایی را پر کند (ما چند POC داریم تا از Google Translate، ChatGPT یا Copilot برای تکمیل خودکار ترجمه ها برای ما استفاده کنیم).

اجتناب از i18n که قابل استخراج نیست

شما فقط می توانید رشته های استاتیک را استخراج کنید، نمی توانید درون یابی رشته ها یا متغیرها را استخراج کنید.

در اینجا 2 نمونه از استفاده بد از i18n آورده شده است

t(`CHARGE_STATUS.${charge.status}`)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما نمی‌توانیم همه رشته‌هایی را که باید هنگام استفاده از درون‌یابی رشته‌ای و متغیر استخراج شوند، بشناسیم

t(result.error)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما نمی توانیم همه رشته های ممکن را بشناسیم result.error هیچ کدام.

برای جلوگیری از استفاده بد در پایگاه کد خود، تصمیم گرفتیم یک قانون Eslint سفارشی بنویسیم تا این اشتباهات را در قلاب پیش از ارتکاب تشخیص دهیم.

قانون noVariableT eslint

module.exports = createRule({
  create: (context) => ({
    CallExpression(node) {
      if (node.callee.name === 't') {
        const arg = node.arguments[0];

        if (arg.type === 'TemplateLiteral' && arg.expressions.length === 0) {
          return;
        }

        if (!arg || arg.type !== 'Literal' || typeof arg.value !== 'string') {
          context.report({
            node,
            message:
              'Only string literals are allowed as arguments to the t() function.',
          });
        }
      }
    },
    MemberExpression(node) {
      if (node.property.name === 't') {
        if (!node.parent.arguments) {
          return;
        }

        const arg = node.parent.arguments[0];

        if (arg.type === 'TemplateLiteral' && arg.expressions.length === 0) {
          return;
        }

        if (!arg || arg.type !== 'Literal' || typeof arg.value !== 'string') {
          context.report({
            node,
            message:
              'Only string literals are allowed as arguments to the t() function.',
          });
        }
      }
    },
  }),
  name: 'no-variable-t',
  meta: {
    type: 'problem',
    fixable: 'code',
    docs: {
      description: 'Using t(variable) breaks i18next-scanner',
      recommended: 'error',
    },
    schema: [],
  },
  defaultOptions: [],
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای درک اینکه این قانون اسلینت چه می کند، باید بدانید که جاوا اسکریپت AST چگونه کار می کند. می توانید آن را در اینجا کاوش کنید https://astexplorer.net/

ast-t

آ CallExpression یک فراخوانی تابع را نشان می دهد. قانون همه را جستجو می کند t callExpression که از یک رشته واقعی استفاده نمی کنند و یک خطا را گزارش می کنند.

برای جمع بندی

DX همچنین نحوه جلوگیری از اشتباه توسعه دهندگان است.
در Woovi وقتی خطایی رخ می‌دهد، شخص را سرزنش نمی‌کنیم، ما سعی می‌کنیم علت اصلی را بفهمیم، فرآیند و اتوماسیون خود را بهبود ببخشیم تا دوباره این اتفاق نیفتد.

چگونه از اشتباهات در استارتاپ خود جلوگیری می کنید؟ چه اتوماسیونی در اختیار دارید؟


وای
Woovi یک استارت آپ است که خریداران را قادر می سازد هر طور که دوست دارند پرداخت کنند. برای ایجاد این امکان، Woovi راه حل های پرداخت فوری را برای بازرگانان برای پذیرش سفارشات ارائه می دهد.

اگر می خواهید با ما کار کنید، ما استخدام می کنیم!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا