diff --git a/app/[locale]/about/about-narai-detail.tsx b/app/[locale]/about/about-narai-detail.tsx index 4efd5936a..098d19bc6 100644 --- a/app/[locale]/about/about-narai-detail.tsx +++ b/app/[locale]/about/about-narai-detail.tsx @@ -112,6 +112,9 @@ export default function AboutNaraiDetail({ awards }: { awards: string }) {

{t('about.materials.water.title')}

+

+ {t('about.materials.water.subtitle')} +

{t('about.materials.water.body')}

@@ -132,6 +135,9 @@ export default function AboutNaraiDetail({ awards }: { awards: string }) {

{t('about.materials.rice.title')}

+

+ {t('about.materials.rice.subtitle')} +

{t('about.materials.rice.body')}

@@ -152,6 +158,9 @@ export default function AboutNaraiDetail({ awards }: { awards: string }) {

{t('about.materials.koji.title')}

+

+ {t('about.materials.koji.subtitle')} +

{t('about.materials.koji.body')}

@@ -165,7 +174,7 @@ export default function AboutNaraiDetail({ awards }: { awards: string }) {
-

{t('about.irie.title')}

+

{t('about.irie.title')}

{t('about.irie.body')}

diff --git a/app/[locale]/bar/sagyobar-detail.tsx b/app/[locale]/bar/sagyobar-detail.tsx index b71ec2234..784d8f1a7 100644 --- a/app/[locale]/bar/sagyobar-detail.tsx +++ b/app/[locale]/bar/sagyobar-detail.tsx @@ -129,7 +129,9 @@ export default function SagyobarDetail() {

{t('bar.menu.para001')} @@ -142,7 +144,7 @@ export default function SagyobarDetail() {

-

{t('bar.clerk.title')}

+

{t('bar.clerk.title')}

{t('bar.clerk.001')}

{t('bar.clerk.002')}

diff --git a/app/[locale]/company/company-detail.tsx b/app/[locale]/company/company-detail.tsx index 87b0bfc5e..2b3306bd2 100644 --- a/app/[locale]/company/company-detail.tsx +++ b/app/[locale]/company/company-detail.tsx @@ -31,7 +31,9 @@ export default function CompanyDetail() { 'mx-auto max-w-4xl' )} > -

{t('company.title')}

+

+ {t('company.title')} +

{t('company.subtitle001')}

@@ -81,12 +83,12 @@ export default function CompanyDetail() { className={clsx('h-full w-full object-cover')} />
-
{t('company.irie.japanese')}
+
{t('company.irie.japanese')}
{t('company.irie.english')}
{t('company.irie.role')}
-
+
-
{t('company.nishikawa.japanese')}
+
+ {t('company.nishikawa.japanese')} +
{t('company.nishikawa.english')}
{t('company.nishikawa.role')}
-
+
-
{t('company.sundberg.japanese')}
+
+ {t('company.sundberg.japanese')} +
{t('company.sundberg.english')}
{t('company.sundberg.role')}
-
+
-
{t('company.masa.japanese')}
+
{t('company.masa.japanese')}
{t('company.masa.english')}
{t('company.masa.role')}
-
+
-
{t('company.yamano.japanese')}
+
{t('company.yamano.japanese')}
{t('company.yamano.english')}
{t('company.yamano.role')}
-
+
-
{t('company.yoshida.japanese')}
+
{t('company.yoshida.japanese')}
{t('company.yoshida.english')}
{t('company.yoshida.role')}
-
+
-
{t('company.ikegaya.japanese')}
+
{t('company.ikegaya.japanese')}
{t('company.ikegaya.english')}
{t('company.ikegaya.role')}
diff --git a/app/[locale]/concept/concept-detail.tsx b/app/[locale]/concept/concept-detail.tsx index a703e379b..47fb9d2a3 100644 --- a/app/[locale]/concept/concept-detail.tsx +++ b/app/[locale]/concept/concept-detail.tsx @@ -31,16 +31,16 @@ export default function ConceptDetail() {

{t('concept.title')}

- {t('concept.para001')} - {t('concept.para002')} + {t('concept.para001')} {t('concept.para002')}{' '} {t('concept.para003')}

-
+

{t('concept.subtitle001')}

-

{t('concept.para004')}

+

{t('concept.para004')}

{t('concept.para005')}

+

{t('concept.para006')}

- {t('concept.para006')} {t('concept.para007')} {t('concept.para008')} + {t('concept.para007')} {t('concept.para008')}

{t('concept.para009')}

{t('concept.para010')}

diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index c041baa2f..db95f6c5f 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -20,7 +20,8 @@ import SagyobarPreview from 'components/layout/sagyobar-preview'; import Shoplist from 'components/layout/shoplist'; import StoriesPreview from 'components/layout/stories-preview'; import { BLOG_HANDLE } from 'lib/constants'; -import { getCart } from 'lib/shopify'; +import { getCart, getProduct } from 'lib/shopify'; +import { Product } from 'lib/shopify/types'; import { cookies } from 'next/headers'; import Image from 'next/image'; import { Suspense } from 'react'; @@ -48,9 +49,14 @@ export default async function HomePage({ cart = await getCart({ cartId, language: locale?.toUpperCase() }); } + const promotedItem: Product | undefined = await getProduct({ + handle: 'gift-bag-and-postcard-set', + language: locale?.toUpperCase() + }); + return (
- +
diff --git a/app/[locale]/privacy/privacy-policy.tsx b/app/[locale]/privacy/privacy-policy.tsx index 26d3caa2e..0a3ed47c9 100644 --- a/app/[locale]/privacy/privacy-policy.tsx +++ b/app/[locale]/privacy/privacy-policy.tsx @@ -6,8 +6,8 @@ export default function PrivacyPolicy() { const t = useTranslations('Index'); return ( <> -
-
+
+
{t('privacy.title')}
@@ -16,7 +16,7 @@ export default function PrivacyPolicy() {

{t('privacy.pleaseRead')}

{t('privacy.usedFor')}

-
+
{t('privacy.definitions.title')}
@@ -37,13 +37,13 @@ export default function PrivacyPolicy() {

{t('privacy.definitions.usageData')}

{t('privacy.definitions.you')}

-
+
{t('privacy.collectingAndUsing.title')}

{t('privacy.collectingAndUsing.inScope')}

-
+
{t('privacy.usageData.title')}
@@ -52,7 +52,7 @@ export default function PrivacyPolicy() {

{t('privacy.usageData.deviceInfo')}

-
+
{t('privacy.cookies.title')}
@@ -60,7 +60,7 @@ export default function PrivacyPolicy() {

{t('privacy.cookies.doNotAccept')}

-
+
{t('privacy.personal.title')}
@@ -80,20 +80,20 @@ export default function PrivacyPolicy() {
  • {t('privacy.personal.sharing.socialMedia')}
  • -
    +
    {t('privacy.personal.retention.title')}

    {t('privacy.personal.retention.asNecessary')}

    {t('privacy.personal.retention.internalAnalysis')}

    -
    +
    {t('privacy.personal.transfer.title')}

    {t('privacy.personal.transfer.transborder')}

    -
    +
    {t('privacy.personal.disclosure.title')}
    @@ -102,7 +102,7 @@ export default function PrivacyPolicy() {

    {t('privacy.personal.disclosure.goodFaith')}

    {t('privacy.personal.disclosure.noGuarantee')}

    -
    +
    {t('privacy.personal.processing.title')}
    @@ -119,34 +119,34 @@ export default function PrivacyPolicy() {

    {t('privacy.personal.processing.creditCards')}

    {t('privacy.personal.processing.cookies')}

    -
    +
    {t('privacy.personal.mobile.title')}

    {t('privacy.personal.mobile.optOut')}

    -
    +
    {t('privacy.personal.doNotTrack.title')}

    {t('privacy.personal.doNotTrack.noResponse')}

    {t('privacy.personal.doNotTrack.browser')}

    -
    +
    {t('privacy.personal.links.title')}

    {t('privacy.personal.links.external')}

    {t('privacy.personal.links.disclaimer')}

    -
    +
    {t('privacy.changes.title')}

    {t('privacy.changes.updates')}

    {t('privacy.changes.review')}

    -
    +
    {t('privacy.contactUs.title')}
    diff --git a/app/[locale]/product/[handle]/page.tsx b/app/[locale]/product/[handle]/page.tsx index 76350f217..f8306e001 100644 --- a/app/[locale]/product/[handle]/page.tsx +++ b/app/[locale]/product/[handle]/page.tsx @@ -120,12 +120,12 @@ export default async function ProductPage({
    -

    {product.title}

    +

    {product.title}

    -
    +
    -

    other products

    -
      +

      other products

      +
        {relatedProducts.map((product) => (
    -
    +
    ); diff --git a/app/[locale]/terms/terms-of-use.tsx b/app/[locale]/terms/terms-of-use.tsx index cce017536..14d8289c6 100644 --- a/app/[locale]/terms/terms-of-use.tsx +++ b/app/[locale]/terms/terms-of-use.tsx @@ -12,7 +12,7 @@ export default function TermsOfUse() {
    {t('terms.pleaseRead')}
    -
    +
    {t('terms.definitions.title')}
    @@ -29,7 +29,7 @@ export default function TermsOfUse() {

    {t('terms.definitions.socialMedia')}

    {t('terms.definitions.you')}

    -
    +
    {t('terms.acknowledgment.title')}
    @@ -39,7 +39,7 @@ export default function TermsOfUse() {

    {t('terms.acknowledgment.age')}

    {t('terms.acknowledgment.privacy')}

    -
    +
    {t('terms.orders.title')}
    @@ -59,27 +59,27 @@ export default function TermsOfUse() {
  • {t('terms.orders.returns.exceptions.digital')}
  • -
    +
    {t('terms.inaccuracies.title')}

    {t('terms.inaccuracies.errorsPossible')}

    {t('terms.inaccuracies.noGuarantees')}

    -
    +
    {t('terms.prices.title')}

    {t('terms.prices.changes')}

    {t('terms.prices.payments')}

    -
    +
    {t('terms.promotions.title')}

    {t('terms.promotions.conflicts')}

    -
    +
    {t('terms.ip.title')}
    @@ -88,13 +88,13 @@ export default function TermsOfUse() {

    {t('terms.ip.trademarks')}

    {t('terms.ip.assignment')}

    -
    +
    {t('terms.thirdPartyLinks.title')}

    {t('terms.thirdPartyLinks.noControl')}

    -
    +
    {t('terms.liability.title')}
    @@ -102,14 +102,14 @@ export default function TermsOfUse() {

    {t('terms.liability.noSpecialDamages')}

    {t('terms.liability.noSpecialDamages')}

    -
    +
    {t('terms.disclaimer.title')}

    {t('terms.disclaimer.asIs')}

    {t('terms.disclaimer.conflicts')}

    -
    +
    {t('terms.misc.title')}
    @@ -119,7 +119,7 @@ export default function TermsOfUse() {

    {t('terms.misc.translation')}

    {t('terms.misc.changes')}

    -
    +
    {t('terms.contactUs.title')}
    diff --git a/components/cart/add-many-to-cart.tsx b/components/cart/add-many-to-cart.tsx index 5ab28d6bd..cf77732bb 100644 --- a/components/cart/add-many-to-cart.tsx +++ b/components/cart/add-many-to-cart.tsx @@ -2,7 +2,6 @@ import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; -import { SupportedLocale } from 'components/layout/navbar/language-control'; import LoadingDots from 'components/loading-dots'; import { ProductVariant } from 'lib/shopify/types'; import { useLocale, useTranslations } from 'next-intl'; @@ -86,7 +85,7 @@ export function AddManyToCart({ const error = await addItems({ variantId: selectedVariantId, quantity: currentQuantity, - locale: locale as SupportedLocale + country: locale.toUpperCase() }); if (error) { diff --git a/components/cart/modal.tsx b/components/cart/modal.tsx index e60d01b3f..319da1e39 100644 --- a/components/cart/modal.tsx +++ b/components/cart/modal.tsx @@ -4,7 +4,7 @@ import { Dialog, Transition } from '@headlessui/react'; import { ShoppingCartIcon } from '@heroicons/react/24/outline'; import Price from 'components/price'; import { DEFAULT_OPTION } from 'lib/constants'; -import type { Cart } from 'lib/shopify/types'; +import type { Cart, Product } from 'lib/shopify/types'; import { createUrl } from 'lib/utils'; import { useTranslations } from 'next-intl'; import Image from 'next/image'; @@ -14,13 +14,20 @@ import AgeConfirmBeforeCheckout from './age-gate-confirm-before-checkout'; import CloseCart from './close-cart'; import DeleteItemButton from './delete-item-button'; import EditItemQuantityButton from './edit-item-quantity-button'; +import { InlineAddToCart } from './inline-add-to-cart'; import OpenCart from './open-cart'; type MerchandiseSearchParams = { [key: string]: string; }; -export default function CartModal({ cart }: { cart: Cart | undefined }) { +export default function CartModal({ + cart, + promotedItem +}: { + cart: Cart | undefined; + promotedItem?: Product; +}) { const t = useTranslations('Index'); const [isOpen, setIsOpen] = useState(false); const quantityRef = useRef(cart?.totalQuantity); @@ -150,15 +157,21 @@ export default function CartModal({ cart }: { cart: Cart | undefined }) { ); })} + {!!promotedItem && ( + + )}
    -
    + {/*

    Taxes

    -
    +
    */}

    Shipping

    Calculated at checkout

    diff --git a/components/cart/promoted-cart-item.tsx b/components/cart/promoted-cart-item.tsx new file mode 100644 index 000000000..31be57ffc --- /dev/null +++ b/components/cart/promoted-cart-item.tsx @@ -0,0 +1,99 @@ +'use client'; + +import { addItem } from 'components/cart/actions'; +import LoadingDots from 'components/loading-dots'; +import { ProductVariant } from 'lib/shopify/types'; +import { useTranslations } from 'next-intl'; +import { useRouter, useSearchParams } from 'next/navigation'; +import { useTransition } from 'react'; + +export function PromotedCartItem({ + variants, + availableForSale +}: { + variants: ProductVariant[]; + availableForSale: boolean; +}) { + const router = useRouter(); + const searchParams = useSearchParams(); + const t = useTranslations('Index'); + + const firstVariant = variants?.[0]; + + const [isPending, startTransition] = useTransition(); + const defaultVariantId = variants.length === 1 ? variants[0]?.id : undefined; + const variant = variants.find((variant: ProductVariant) => + variant.selectedOptions.every( + (option) => option.value === searchParams.get(option.name.toLowerCase()) + ) + ); + const selectedVariantId = variant?.id || defaultVariantId; + const title = !availableForSale + ? 'Out of stock' + : !selectedVariantId + ? 'Please select options' + : undefined; + + return firstVariant ? ( + +
    +
    +
    */} + {!isPending ? ( + {availableForSale ? t('cart.add') : t('cart.out-of-stock')} + ) : ( + + )} + + + ) : null; +} diff --git a/components/label.tsx b/components/label.tsx index d0f7dc386..2d9e9c78e 100644 --- a/components/label.tsx +++ b/components/label.tsx @@ -15,7 +15,7 @@ const Label = ({ return (
    -

    +

    {title}

    diff --git a/components/layout/footer.tsx b/components/layout/footer.tsx index d87d26f67..c16551199 100644 --- a/components/layout/footer.tsx +++ b/components/layout/footer.tsx @@ -38,7 +38,9 @@ export default async function Footer({ cart }: { cart?: Cart }) {

    suginomori brewery

    -

    長野県塩尻市奈良井551-1

    +

    + 長野県塩尻市奈良井551-1 +

    551-1 Narai, Shiojiri, Nagano

    @@ -50,14 +52,16 @@ export default async function Footer({ cart }: { cart?: Cart }) { -
    +

    杉の森酒造

    suginomori brewery

    -

    長野県塩尻市奈良井551-1

    -

    551-1 Narai, Shiojiri, Nagano

    +

    + 長野県塩尻市奈良井551-1 +

    +

    551-1 Narai, Shiojiri, Nagano

    @@ -69,7 +73,7 @@ export default async function Footer({ cart }: { cart?: Cart }) {
    -
    +
    © {copyrightDate} {copyrightName} {copyrightName.length && !copyrightName.endsWith('.') ? '.' : ''} @@ -87,10 +91,20 @@ export default async function Footer({ cart }: { cart?: Cart }) {
    - + - +
    diff --git a/components/layout/navbar/index.tsx b/components/layout/navbar/index.tsx index 6cdefdcf2..d359041b0 100644 --- a/components/layout/navbar/index.tsx +++ b/components/layout/navbar/index.tsx @@ -6,7 +6,7 @@ import clsx from 'clsx'; import CartModal from 'components/cart/modal'; import OpenCart from 'components/cart/open-cart'; import LogoNamemark from 'components/icons/namemark'; -import { Cart } from 'lib/shopify/types'; +import { Cart, Product } from 'lib/shopify/types'; import Link from 'next/link'; import { Suspense } from 'react'; import { useInView } from 'react-intersection-observer'; @@ -17,12 +17,14 @@ export default function Navbar({ cart, locale, compact, - showTop = false + showTop = false, + promotedItem }: { cart?: Cart; locale?: SupportedLocale; compact?: boolean; showTop?: boolean; + promotedItem?: Product; }) { const { ref, inView } = useInView({ threshold: 0, @@ -63,7 +65,7 @@ export default function Navbar({
    }> - +
    diff --git a/components/product/product-description.tsx b/components/product/product-description.tsx index 02489c6de..8adbb8708 100644 --- a/components/product/product-description.tsx +++ b/components/product/product-description.tsx @@ -6,7 +6,7 @@ export function ProductDescription({ product }: { product: Product }) { <> {product.descriptionHtml ? ( ) : null} diff --git a/messages/en.json b/messages/en.json index 85b86ea91..44b0ad30f 100644 --- a/messages/en.json +++ b/messages/en.json @@ -16,16 +16,16 @@ }, "shopping-guide": { "title": "shopping guide", - "terms": "terms of use", - "legal": "legal notice", + "terms": "terms and conditions", + "legal": "disclosures", "privacy": "privacy policy", "contact": "contact" }, "newsletter": { "title": "newsletter", - "description": "Subscribe to our newsletter to get access to exclusive information regarding events and pairing dinners.", - "placeholder": "Email", - "button": "Notify me" + "description": "Subscribe to get access to exclusive information regarding events and pairing dinners.", + "placeholder": "email", + "button": "subscribe" }, "home": { "previews": { @@ -52,25 +52,26 @@ "concept": { "title": "beyond brewing", "subtitle": "", - "body": "We are driven by our mission to preserve Japanese sake culture for future generations. To achieve this, we reexamine conventional practices of the sake industry and experiment with new endeavors. We are dedicated to exploring sake with a free and creative approach, going beyond brewing and spreading its charm to the world.", + "body": "Driven by our mission to preserve Japanese sake culture for future generations, we reexamine conventional practices of the sake industry and experiment with new endeavors. We are dedicated to exploring sake with a free and creative approach, going beyond brewing and spreading its charm to the world.", "button": "concept" } } }, "shops": { + "top": "top", "title": "shop list", "subtitle": "", "all": "All shops", - "hokkaido": "Hokkaido / North", - "kanto": "Kanto", - "chubu": "Chubu", - "kinki": "Kinki", - "chugoku": "Chugoku", - "kyushu": "Kyushu" + "hokkaido": "Hokkaido / Tohoku region", + "kanto": "Kanto region", + "chubu": "Chubu region", + "kinki": "Kinki region", + "chugoku": "Chugoku region", + "kyushu": "Kyushu region" }, "footer": { "newsletter": { - "promo": "Get access to exclusive information regarding events and pairing dinners." + "promo": "Get access to exclusive information on events & pairing dinners." }, "menu": { "title": "menu", @@ -145,15 +146,18 @@ "title": "the ingredients of narai", "subtitle": "", "water": { - "title": "water - the foundation", + "title": "water -", + "subtitle": "the foundation", "body": "While many breweries use a stable water source such as well water, narai uses the fresh mountain water of Kiso Valley, flowing from an altitude of over 1,000m. The water originates from a spring near the watershed of the Shinano River and Kiso River, and is characterized by its clarity and smooth, rounded texture brought about by a rare water hardness of less than 25." }, "rice": { - "title": "rice - the core", + "title": "rice -", + "subtitle": "the core", "body": "We use rice that has been carefully cultivated by Farm Ichimaru, a rice farm in Azumino, Nagano. We have a strong commitment to using locally grown rice. Our master brewer personally visits the farm, participates in rice planting, and collaborates with the farmers to carefully select the best rice for brewing narai." }, "koji": { - "title": "sake yeast & koji (fermentation) - the constituents", + "title": "sake yeast & koji - ", + "subtitle": "the constituents", "body": "We use Kyokai No.7 sake yeast from Nagano, which is known for its strong fermentability and ability to refine aromas elegantly. For the koji mold that converts rice into sugar, we select a strain that is well-balanced with high enzymatic activity." } }, @@ -165,12 +169,12 @@ "bar": { "001": { "title": { - "line001": "sagyobar : a brewery-operated bar & workspace", - "line002": "", - "line003": "" + "line001": "sagyobar:", + "line002": "a brewery-operated", + "line003": "bar & workspace" }, "para001": "Introducing sagyobar: a place where brewery operations (sagyo) and drinking (bar) come together. We have combined our brewery workspace, where we pack boxes and fulfill orders, with a place to enjoy sake served from our very own suginomori wagon.", - "para002": "The renovated warehouse was originally used for storing equipment and business supplies left from our predecessor, the old Suginomori Shuzo. While maintaining its original structure, we have revamped its entrance and installed new systems such as lighting and air conditioning. We utilize “P-boxes” – containers used to transport sake bottles – that can be flexibly arranged to transform the space into standing bar." + "para002": "The renovated warehouse was originally used for storing equipment and business supplies left from our predecessor, the old Suginomori Shuzo. While maintaining its original structure, we have revamped its entrance and installed new features such as lighting and air conditioning. We utilize “P-boxes” – containers used to transport sake bottles – that can be flexibly arranged to transform the space into a standing bar." }, "002": "sagyobar is a place where visitors to Narai-juku can enjoy narai, freshly brewed at our brewery just a short walk away. We also plan to host music events, workshops, and other various activities, and turn sagyobar into a new tourist hub in Narai-juku.", "003": { @@ -226,7 +230,7 @@ }, "director": { "label": "ceo", - "value": "Kou Sundberg William" + "value": "Kou William Sundberg" }, "since": { "label": "Founded", @@ -253,13 +257,13 @@ }, "sundberg": { "japanese": "サンドバーグ弘", - "english": "Kou Sundberg", + "english": "Kou William Sundberg", "role": "Chief Executive Officer" }, "masa": { "japanese": "小松正則", "english": "Masanori Komatsu", - "role": "COO" + "role": "Business Development" }, "yamano": { "japanese": "山野恭稔", diff --git a/messages/ja.json b/messages/ja.json index 90fd06d09..a750a7e53 100644 --- a/messages/ja.json +++ b/messages/ja.json @@ -58,6 +58,7 @@ } }, "shops": { + "top": "トップ", "title": "取り扱い店", "subtitle": "取り扱い店", "all": "全店", @@ -121,7 +122,7 @@ }, "about": { "001": { - "title": "山の水", + "title": "山の水、", "subtitle": "空に一番近い酒" }, "002": { @@ -143,15 +144,18 @@ "title": "自然を紡ぐ", "subtitle": " – naraiの素材", "water": { - "title": "水 – 土台", + "title": "水 –", + "subtitle": "土台", "body": "多くの酒蔵が水の性質が安定している井戸水を使用しますが、naraiは標高1,000m以上から流れる天然の山水を使用。信濃川と木曽川の分水嶺付近の湧き水であるこの山水は、日本でも有数な「硬度25以下」の透明感と丸みのある滑らかな舌触りが特徴です。" }, "rice": { - "title": "米 – 幹", + "title": "米 –", + "subtitle": "幹", "body": "長野県安曇野エリアで、日本アルプスの恵みで農家を営む「ファームいちまる」によって、丁寧に育てられた米を使用しています。地産米にこだわり、杜氏自ら農家に通い、田植えなどを行いながら相談し、米を厳選しています。" }, "koji": { - "title": "酵母と麹 - 構成要素(発酵)", + "title": "酵母と麹 -", + "subtitle": "構成要素(発酵)", "body": "酵母は発酵力が強く、香りを上品にまとめることができることが特徴だと考えている長野由来の協会第7号を使用しています。米を糖に変える麹菌は、酵素力価の良いバランスの取れたものを採用しています。" } }, @@ -255,9 +259,9 @@ "role": "蔵元" }, "masa": { - "japanese": "小松正則", + "japanese": "小松正宜", "english": "Masanori Komatsu", - "role": "COO" + "role": "事業開発" }, "yamano": { "japanese": "山野恭稔",