#Marios faqs

1 messages · Page 1 of 1 (latest)

delicate tundra
#

I want to have my faqData.json to be translated at builtime in all locale present and create a dictionary for it so that i can directly import the version of faqData based on locale and use it via getStaitcProps, but where should this function be and what should i do

real crownBOT
#

Hi @delicate tundra. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:

#

To achieve this, you can use the getStaticProps function in your page. This function runs at build time in production and generates static HTML for a page. It can only be exported from a page, and you cannot export it from non-page files, _app, _document, or _error.

In getStaticProps, you can write server-side code directly. This means that instead of fetching an API route from getStaticProps (that itself fetches data from an external source), you can write the server-side code directly in getStaticProps.

Here's an example of how you can do this:

export async function getStaticProps({ locale }) {
  // Load your FAQ data based on the locale
  const faqData = await loadFaqData(locale);

  // If there's no data for the locale, you can opt-out of pre-rendering
  if (!faqData) {
    return {
      notFound: true,
    }
  }

  // By returning { props: faqData }, the page component
  // will receive `faqData` as a prop at build time
  return {
    props: {
      faqData,
    },
  }
}

In this example, loadFaqData is a function that you would write to load your FAQ data based on the locale. This function would be in a separate file and imported into your page file.

Remember, getStaticProps will be called with each locale that is being rendered. If you would like to opt-out of a certain locale from being pre-rendered, you can return notFound: true from getStaticProps and this variant of the page will not be generated.

For pages using getStaticProps with Dynamic Routes, all locale variants of the page desired to be prerendered need to be returned from getStaticPaths. Along with the params object returned for paths, you can also return a locale field specifying which locale you want to render.

#

@delicate tundra kapa.ai is still learning and improving, please let us how it did by reacting below

delicate tundra
#

@real crown no i want to build a function that translates at build time, I can do the rest, I want to know how to achive function at buildtime,

real crownBOT
#

Let me check the knowledge base for you. One moment! :books:

#

To run a function at build time in Next.js, you can use the getStaticProps or getStaticPaths functions. However, these are page-level functions and are not designed to be used for global tasks like translating a JSON file.

For a global task like translating a JSON file at build time, you can use the next.config.js file. This file is not just for configuration - it's a regular Node.js module, so you can write any Node.js code in it.

Here's an example of how you can do this:

const fs = require('fs');
const path = require('path');

// Your translation function
async function translateJson(json, locale) {
  // Your translation logic here
  // ...
  return translatedJson;
}

module.exports = {
  webpack: (config, { isServer }) => {
    // Only run on the server-side build
    if (isServer) {
      const faqData = require('./faqData.json');
      const locales = ['en', 'fr', 'de']; // Your locales here

      locales.forEach(async (locale) => {
        const translatedFaqData = await translateJson(faqData, locale);
        fs.writeFileSync(
          path.resolve(__dirname, `faqData.${locale}.json`),
          JSON.stringify(translatedFaqData)
        );
      });
    }

    return config;
  },
};

In this example, the webpack function in next.config.js is used to run a function at build time. The isServer option is used to ensure that the function only runs on the server-side build.

The function loads the faqData.json file, translates it for each locale, and writes the translated JSON to a new file.

You can then import the translated JSON file in your page components based on the locale.

Please note that this is a simplified example and you may need to adjust it based on your project's requirements and your translation logic.

#

@delicate tundra kapa.ai is still learning and improving, please let us how it did by reacting below

delicate tundra
#

@real crown I wanted to push query of employee.id with router.push but how do i do it?

real crownBOT
#

Let me check the knowledge base for you. One moment! :books:

#

You can use the router.push method from the useRouter hook in Next.js to navigate to a new page with a query parameter. Here's an example:

import { useRouter } from 'next/router'
 
export default function Page({ employee }) {
 const router = useRouter()
 
 return (
 <button
 type="button"
 onClick={() => {
 router.push({
 pathname: '/employee/[id]',
 query: { id: employee.id },
 })
 }}
 >
 Click here to view employee details
 </button>
 )
}

In this example, when the button is clicked, the router.push method is called with an object that specifies the pathname of the new page and the query parameters. The employee.id is passed as a query parameter.

For more information, you can refer to the Next.js documentation on router.push (https://nextjs.org/docs/pages/api-reference/functions/use-router#router-object).

Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@delicate tundra kapa.ai is still learning and improving, please let us how it did by reacting below

delicate tundra
#

@real crown im using app not pages

real crownBOT
#

Let me check the knowledge base for you. One moment! :books:

#

If you're using a custom App component (_app.js or _app.tsx), you can still use the useRouter hook to navigate with query parameters. Here's an example:

import { useRouter } from 'next/router'

function MyApp({ Component, pageProps }) {
  const router = useRouter()

  const goToEmployee = (id) => {
    router.push({
      pathname: '/employee/[id]',
      query: { id },
    })
  }

  // ...

  return <Component {...pageProps} goToEmployee={goToEmployee} />
}

export default MyApp

In this example, a goToEmployee function is defined that navigates to the employee page with the given ID. This function is passed as a prop to the page component.

Then, in your page component, you can call this function to navigate to the employee page:

export default function HomePage({ goToEmployee }) {
  // ...

  return (
    <button onClick={() => goToEmployee('123')}>
      Go to employee
    </button>
  )
}

For more information, you can refer to the Next.js documentation on Custom App (https://nextjs.org/docs/advanced-features/custom-app) and useRouter (https://nextjs.org/docs/pages/api-reference/functions/use-router#router-object).

Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@delicate tundra kapa.ai is still learning and improving, please let us how it did by reacting below

delicate tundra
#

@real crown i will be using import { usePathname, useRouter, useSearchParams } from "next/navigation"; in nextjs 13

real crownBOT
#

Let me check the knowledge base for you. One moment! :books:

#

In Next.js 12, you can use the useRouter, usePathname, and useSearchParams hooks from next/navigation to handle routing in your application. Here's an example of how you can use these hooks:

import { useRouter, usePathname, useSearchParams } from 'next/navigation'

function ExampleClientComponent() {
  const router = useRouter()
  const pathname = usePathname()
  const searchParams = useSearchParams()

  // ...

  const goToEmployee = (id) => {
    router.push({
      pathname: '/employee/[id]',
      query: { id },
    })
  }

  // ...

  return (
    // ...
  )
}

export default ExampleClientComponent

In this example, useRouter is used to navigate to a new page, usePathname is used to get the current path, and useSearchParams is used to get the current search parameters.

Please note that these hooks are only supported in Client Components. They cannot be used in Server Components.

For more information, you can refer to the Next.js documentation on useRouter (https://nextjs.org/docs/app/api-reference/functions/use-router), usePathname (https://nextjs.org/docs/app/api-reference/functions/use-pathname), and useSearchParams (https://nextjs.org/docs/app/api-reference/functions/use-search-params).

Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@delicate tundra kapa.ai is still learning and improving, please let us how it did by reacting below

delicate tundra
#

@real crown i will be using import { usePathname, useRouter, useSearchParams } from "next/navigation"; in nextjs 13

real crownBOT
#

Let me check the knowledge base for you. One moment! :books: