Initial commit: Kottgard testing website code
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* ANNOTATED COPY — every line explained
|
||||
* Source: src/lib/product-i18n.ts
|
||||
* NOT used by the app — read this to learn how the real file works
|
||||
*/
|
||||
// Import project module (@/ alias = src/ folder in tsconfig)
|
||||
import { Product } from '@/types';
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// TypeScript type alias — union or shorthand for complex types
|
||||
type Translator = (path: string, params?: Record<string, string | number>) => string;
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// Export TypeScript type — defines data shape used across the app
|
||||
export interface LocalizedProduct {
|
||||
// Line 6: id: string;
|
||||
id: string;
|
||||
// Line 7: slug: string;
|
||||
slug: string;
|
||||
// Line 8: category: Product['category'];
|
||||
category: Product['category'];
|
||||
// Line 9: name: string;
|
||||
name: string;
|
||||
// Line 10: description: string;
|
||||
description: string;
|
||||
// Line 11: longDescription: string;
|
||||
longDescription: string;
|
||||
// Line 12: price: number;
|
||||
price: number;
|
||||
// Line 13: priceUnit: string;
|
||||
priceUnit: string;
|
||||
// Line 14: image: string;
|
||||
image: string;
|
||||
// Line 15: images: string[];
|
||||
images: string[];
|
||||
// Line 16: badge?: string;
|
||||
badge?: string;
|
||||
// Line 17: inStock: boolean;
|
||||
inStock: boolean;
|
||||
// Line 18: featured: boolean;
|
||||
featured: boolean;
|
||||
// Line 19: weight?: string;
|
||||
weight?: string;
|
||||
// Line 20: tags: string[];
|
||||
tags: string[];
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
}
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// Named export — utility function other files can import
|
||||
export function localizeProduct(product: Product, t: Translator): LocalizedProduct {
|
||||
// Line 24: const base = `products.${product.id}`;
|
||||
const base = `products.${product.id}`;
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// Return value from function
|
||||
return {
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
...product,
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
name: t(`${base}.name`),
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
description: t(`${base}.description`),
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
longDescription: t(`${base}.longDescription`),
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
priceUnit: t(`priceUnit.${product.priceUnitKey}`),
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
badge: product.badgeKey ? t(`badges.${product.badgeKey}`) : undefined,
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
};
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
}
|
||||
// (blank line — separates logical blocks for readability)
|
||||
// Named export — utility function other files can import
|
||||
export function localizeCategory(
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
categoryId: Product['category'],
|
||||
// Line 38: t: Translator
|
||||
t: Translator
|
||||
// Line 39: ): { name: string; description: string } {
|
||||
): { name: string; description: string } {
|
||||
// Return value from function
|
||||
return {
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
name: t(`categories.${categoryId}.name`),
|
||||
// Property or array item — trailing comma allowed in TypeScript
|
||||
description: t(`categories.${categoryId}.description`),
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
};
|
||||
// Closing brace — end of block (function, if, object, JSX)
|
||||
}
|
||||
Reference in New Issue
Block a user