BKJang / dev-tips

📚 This repository is a collection of development tips and troubleshooting I have experienced during development.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

message 객체를 json 형태의 메세지 프로퍼티로 변경해보자!(feat.react-intl)

BKJang opened this issue · comments

Code

function generateTranslations(messageDescriptors) {
  return Object.values(messageDescriptors).reduce((acc, value) => {
    if (
      typeof value.defaultMessage === "string" ||
      typeof value.defaultMessage === "number"
    ) {
      return {
        ...acc,
        [value.id]: value.defaultMessage
      };
    }
    if (typeof value !== "object" || Object.keys(value).length <= 0) {
      throw new TypeError(value);
    }
    return {
      ...acc,
      ...generateTranslations(value)
    };
  }, {});
}

const scope = "Messages";
const messageDescriptors = {
  listTitle: {
    id: `${scope}.listTitle`,
    defaultMessage: "목록"
  },
  detailTitle: {
    id: `${scope}.detailTitle`,
    defaultMessage: "상세"
  },
  body: {
    createTabs: [
      {
        id: `${scope}.body.createTabs.0`,
        defaultMessage: "탭1"
      },
      {
        id: `${scope}.body.createTabs.1`,
        defaultMessage: "탭2"
      },
    ],
  },
};

const ko = generateTranslations(messageDescriptors);
const result = JSON.stringify(ko, null);

Result

{
  "Messages.listTitle":"목록",
  "Messages.detailTitle":"상세",
  "Messages.body.createTabs.0":"탭1",
  "Messages.body.createTabs.1":"탭2"
}