diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 46e040b9a..70456f0da 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -175,17 +175,6 @@ module.exports = { ['/guide/demo', 'Demo'], ] }, - { - title: 'Overview', - collapsable: false, - children: [ - ['/guide/quality', 'Quality'], - ['/guide/supported-browsers', 'Supported browsers'], - ['/guide/dependencies', 'Dependencies'], - ['/guide/licensing', 'Licensing'], - ['/guide/support', 'Support'], - ] - }, { title: 'Getting started', collapsable: false, @@ -199,13 +188,16 @@ module.exports = { ] }, { - title: 'Framework integration', + title: 'Integrations', collapsable: false, children: [ ['/guide/integration-with-react', 'Integration with React'], ['/guide/integration-with-vue', 'Integration with Vue'], ['/guide/integration-with-angular', 'Integration with Angular'], ['/guide/integration-with-svelte', 'Integration with Svelte'], + ['/guide/ai-sdk', 'HyperFormula AI SDK'], + ['/guide/integration-with-langchain', 'Integration with LangChain'], + ['/guide/mcp-server', 'HyperFormula MCP Server'], ] }, { @@ -276,6 +268,17 @@ module.exports = { ['/guide/migration-from-2.x-to-3.0', 'Migrating from 2.x to 3.0'], ] }, + { + title: 'About', + collapsable: false, + children: [ + ['/guide/quality', 'Quality'], + ['/guide/supported-browsers', 'Supported browsers'], + ['/guide/dependencies', 'Dependencies'], + ['/guide/licensing', 'Licensing'], + ['/guide/support', 'Support'], + ] + }, { title: 'Miscellaneous', collapsable: false, diff --git a/docs/guide/ai-sdk.md b/docs/guide/ai-sdk.md new file mode 100644 index 000000000..aeb93e6ca --- /dev/null +++ b/docs/guide/ai-sdk.md @@ -0,0 +1,51 @@ +# HyperFormula AI SDK + +Let LLMs safely read/write spreadsheets and compute formulas via a deterministic engine. + +## What it does + +- **Evaluate formulas on the fly** —call `calculateFormula()` to evaluate any Excel-compatible formula without placing it in a cell. +- **Read and write cells and ranges** —get or set individual cells and multi-cell ranges so an LLM can inspect, populate, or modify sheet data programmatically. +- **Trace dependencies** —call `getCellDependents()` and `getCellPrecedents()` to understand which cells feed into a formula and what downstream values would change. + +## Quickstart + +```js +import HyperFormula from 'hyperformula'; +import { createSpreadsheetTools } from 'hyperformula/ai'; + +// 1. Create a HyperFormula instance with initial data +const hf = HyperFormula.buildFromArray([ + ['Revenue', 100], + ['Cost', 60], + ['Profit', '=B1-B2'], +]); + +// 2. Create tools your LLM agent can call +const tools = createSpreadsheetTools(hf); + +// 3. Agent interaction examples +tools.evaluate({ formula: '=IRR({-1000,300,400,500,200})' }); +// → 0.1189 — deterministic, no LLM math + +tools.setCellContents({ sheet: 0, col: 1, row: 0, value: 200 }); +tools.getRange({ sheet: 0, startCol: 0, startRow: 0, endCol: 1, endRow: 2 }); +// → [['Revenue', 200], ['Cost', 60], ['Profit', 140]] + +// Agent: "What drives the profit number?" +tools.getDependents({ sheet: 0, col: 1, row: 0 }); +// → [{ sheet: 0, col: 1, row: 2 }] — Revenue flows into Profit +``` + +## Use cases + +- **Explain a sheet** —ask an agent to summarize what a spreadsheet does, which cells are inputs, and how outputs are derived. +- **Generate a what-if scenario** —let the model tweak assumptions (price, volume, rate) and observe how results change in real time. +- **Validate and clean data** —have the agent scan ranges for errors, missing values, or inconsistencies and fix them with formulas or direct edits. +- **Create formulas from natural language** —describe a calculation in plain English and let the model write and verify the correct Excel formula. + +## Beta access + +::: tip +[Sign up for beta access](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) +::: diff --git a/docs/guide/custom-functions.md b/docs/guide/custom-functions.md index d78408e61..10d1db153 100644 --- a/docs/guide/custom-functions.md +++ b/docs/guide/custom-functions.md @@ -358,18 +358,12 @@ it('returns a VALUE error if the range argument contains a string', () => { ## Working demo +Explore the full working example on [Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.2.x/custom-functions?v=${$page.buildDateURIEncoded}). + This demo contains the implementation of both the [`GREET`](#add-a-simple-custom-function) and [`DOUBLE_RANGE`](#advanced-custom-function-example) custom functions. - - ## Function options You can set the following options for your function: diff --git a/docs/guide/i18n-features.md b/docs/guide/i18n-features.md index 90eba856c..14bb7b3a0 100644 --- a/docs/guide/i18n-features.md +++ b/docs/guide/i18n-features.md @@ -7,7 +7,7 @@ Configure HyperFormula to match the languages and regions of your users. ## Function names and errors -Each of HyperFormula's [built-in functions](built-in-functions.md) and [errors](types-of-errors.md) is available in [17 languages](localizing-functions.md#list-of-supported-languages). +Each of HyperFormula's [built-in functions](built-in-functions.md) and [errors](types-of-errors.md) is available in [18 languages](localizing-functions.md#list-of-supported-languages). You can easily [switch between languages](localizing-functions.md) ([`language`](../api/interfaces/configparams.md#language)). diff --git a/docs/guide/integration-with-angular.md b/docs/guide/integration-with-angular.md index 1991fe3fb..8f78e2097 100644 --- a/docs/guide/integration-with-angular.md +++ b/docs/guide/integration-with-angular.md @@ -6,10 +6,4 @@ For more details, see the [client-side installation](client-side-installation.md ## Demo - +Explore the full working example on [Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.2.x/angular-demo?v=${$page.buildDateURIEncoded}). diff --git a/docs/guide/integration-with-langchain.md b/docs/guide/integration-with-langchain.md new file mode 100644 index 000000000..cbb695dcd --- /dev/null +++ b/docs/guide/integration-with-langchain.md @@ -0,0 +1,53 @@ +# Integration with LangChain/LangGraph + +A LangChain/LangGraph tool that gives AI agents deterministic, Excel-compatible formula evaluation instead of relying on LLM-generated math. + +## What it does + +**Without HyperFormula:** + +```python +result = llm.invoke( + "Calculate the IRR for these cash flows: [-1000, 300, 400, 500, 200]" +) +# "The IRR is approximately 12.4%" ← non-deterministic, unverifiable +``` + +**With HyperFormula tool:** + +```python +from langchain_core.tools import tool +from hyperformula import HyperFormula + +hf = HyperFormula.build_from_array([[-1000, 300, 400, 500, 200]]) + +@tool +def evaluate_formula(formula: str) -> str: + """Evaluate an Excel-compatible formula using HyperFormula.""" + return hf.calculate_formula(formula, sheet_id=0) + +agent = create_react_agent(llm, [evaluate_formula]) + +# Agent calls: evaluate_formula("=IRR(A1:E1)") +# → 0.1189 ← deterministic, auditable +``` + +## How it works + +1. **Agent populates a HyperFormula sheet** —writes data and formulas (`=SUM`, `=IF`, `=VLOOKUP`, etc.) into cells. +2. **HyperFormula evaluates deterministically** —resolves the full dependency graph using 400+ built-in functions. No LLM in the loop for math. +3. **Agent continues with verified data** —computed values flow back into the chain for reasoning, reporting, or downstream actions. + +## Use cases + +- Financial modeling (NPV, IRR, amortization) +- Data transformation and aggregation (SUMIF, VLOOKUP) +- Dynamic pricing with formula-defined logic +- What-if scenarios and forecasting +- Report generation with verified KPIs + +## Beta access + +::: tip +[Sign up for beta access](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) +::: diff --git a/docs/guide/integration-with-react.md b/docs/guide/integration-with-react.md index 75b4c64e7..d4bc7fe75 100644 --- a/docs/guide/integration-with-react.md +++ b/docs/guide/integration-with-react.md @@ -6,10 +6,4 @@ For more details, see the [client-side installation](client-side-installation.md ## Demo - +Explore the full working example on [Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.2.x/react-demo?v=${$page.buildDateURIEncoded}). diff --git a/docs/guide/integration-with-svelte.md b/docs/guide/integration-with-svelte.md index 310fc8823..8b3a5f4b6 100644 --- a/docs/guide/integration-with-svelte.md +++ b/docs/guide/integration-with-svelte.md @@ -6,10 +6,4 @@ For more details, see the [client-side installation](client-side-installation.md ## Demo - +Explore the full working example on [Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.2.x/svelte-demo?v=${$page.buildDateURIEncoded}). diff --git a/docs/guide/integration-with-vue.md b/docs/guide/integration-with-vue.md index 5307780c6..eaa104e0e 100644 --- a/docs/guide/integration-with-vue.md +++ b/docs/guide/integration-with-vue.md @@ -31,14 +31,8 @@ This function prevents Vue from converting the HyperFormula instance into a reac ## Demo +Explore the full working example on [Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.2.x/vue-3-demo?v=${$page.buildDateURIEncoded}). + ::: tip This demo uses the [Vue 3](https://v3.vuejs.org/) framework. If you are looking for an example using Vue 2, check out the [code on GitHub](https://github.com/handsontable/hyperformula-demos/tree/2.5.x/vue-demo). ::: - - diff --git a/docs/guide/localizing-functions.md b/docs/guide/localizing-functions.md index ee777d838..1f8a752b3 100644 --- a/docs/guide/localizing-functions.md +++ b/docs/guide/localizing-functions.md @@ -1,7 +1,7 @@ # Localizing functions You can localize a function's ID and error -messages. Currently, HyperFormula supports 17 languages, with British English +messages. Currently, HyperFormula supports 18 languages, with British English as the default. To change the language all you need to do is import and @@ -128,6 +128,7 @@ You can localize your custom functions as well. For details, see the [Custom fun | Spanish | esES | | Swedish | svSE | | Turkish | trTR | +| Indonesian | idID | ## Demo diff --git a/docs/guide/mcp-server.md b/docs/guide/mcp-server.md new file mode 100644 index 000000000..618323f22 --- /dev/null +++ b/docs/guide/mcp-server.md @@ -0,0 +1,44 @@ +# HyperFormula MCP Server + +An MCP (Model Context Protocol) server that exposes HyperFormula as a tool for any MCP-compatible AI client, giving LLMs deterministic spreadsheet computation. + +## What it does + +- **Evaluate formulas** —any MCP client can call HyperFormula to evaluate Excel-compatible formulas and get exact results. +- **Read and write cells** —get or set individual cell values and ranges through standard MCP tool calls. +- **Inspect dependencies** —trace which cells a formula depends on and understand the calculation graph. + +**Without HyperFormula:** + +``` +User: What's the NPV at 8% for these cash flows? +Agent: "Approximately $142.50" ← non-deterministic, unverifiable +``` + +**With HyperFormula MCP server:** + +``` +User: What's the NPV at 8% for these cash flows? +Agent → tool call: evaluate("=NPV(0.08, B1:B5)") +Agent: "$138.43" ← deterministic, auditable +``` + +## How it works + +1. **Start the MCP server** —runs HyperFormula as a local MCP server that any compatible client (Claude Desktop, Cursor, VS Code, etc.) can connect to. +2. **Client sends tool calls** —the AI client calls tools like `evaluate`, `getCellValue`, and `setCellContents` via the MCP protocol. +3. **HyperFormula evaluates deterministically** —resolves formulas using 400+ built-in functions with full dependency tracking. No LLM in the loop for math. +4. **Results flow back to the client** —computed values return through MCP, grounding the AI's response in verified numbers. + +## Use cases + +- Spreadsheet Q&A in Claude Desktop or other MCP clients +- Formula evaluation in IDE-based AI assistants +- Financial calculations in chat-based agent workflows +- Data validation and transformation via natural language + +## Beta access + +::: tip +[Sign up for beta access](https://2fmjvg.share-eu1.hsforms.com/2e6drCkuLTn-1RuiYB91eJA) +::: diff --git a/package-lock.json b/package-lock.json index f2d4c6f11..716278366 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10062,6 +10062,34 @@ "esbuild-windows-arm64": "0.14.7" } }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.7.tgz", + "integrity": "sha512-9/Q1NC4JErvsXzJKti0NHt+vzKjZOgPIjX/e6kkuCzgfT/GcO3FVBcGIv4HeJG7oMznE6KyKhvLrFgt7CdU2/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.7.tgz", + "integrity": "sha512-Z9X+3TT/Xj+JiZTVlwHj2P+8GoiSmUnGVz0YZTSt8WTbW3UKw5Pw2ucuJ8VzbD2FPy0jbIKJkko/6CMTQchShQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, "node_modules/esbuild-darwin-arm64": { "version": "0.14.7", "cpu": [ @@ -10074,6 +10102,202 @@ "darwin" ] }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.7.tgz", + "integrity": "sha512-76zy5jAjPiXX/S3UvRgG85Bb0wy0zv/J2lel3KtHi4V7GUTBfhNUPt0E5bpSXJ6yMT7iThhnA5rOn+IJiUcslQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.7.tgz", + "integrity": "sha512-lSlYNLiqyzd7qCN5CEOmLxn7MhnGHPcu5KuUYOG1i+t5A6q7LgBmfYC9ZHJBoYyow3u4CNu79AWHbvVLpE/VQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.7.tgz", + "integrity": "sha512-Vk28u409wVOXqTaT6ek0TnfQG4Ty1aWWfiysIaIRERkNLhzLhUf4i+qJBN8mMuGTYOkE40F0Wkbp6m+IidOp2A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.7.tgz", + "integrity": "sha512-+Lvz6x+8OkRk3K2RtZwO+0a92jy9si9cUea5Zoru4yJ/6EQm9ENX5seZE0X9DTwk1dxJbjmLsJsd3IoowyzgVg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.7.tgz", + "integrity": "sha512-OzpXEBogbYdcBqE4uKynuSn5YSetCvK03Qv1HcOY1VN6HmReuatjJ21dCH+YPHSpMEF0afVCnNfffvsGEkxGJQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.7.tgz", + "integrity": "sha512-kJd5beWSqteSAW086qzCEsH6uwpi7QRIpzYWHzEYwKKu9DiG1TwIBegQJmLpPsLp4v5RAFjea0JAmAtpGtRpqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.7.tgz", + "integrity": "sha512-mFWpnDhZJmj/h7pxqn1GGDsKwRfqtV7fx6kTF5pr4PfXe8pIaTERpwcKkoCwZUkWAOmUEjMIUAvFM72A6hMZnA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.7.tgz", + "integrity": "sha512-wM7f4M0bsQXfDL4JbbYD0wsr8cC8KaQ3RPWc/fV27KdErPW7YsqshZZSjDV0kbhzwpNNdhLItfbaRT8OE8OaKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.7.tgz", + "integrity": "sha512-J/afS7woKyzGgAL5FlgvMyqgt5wQ597lgsT+xc2yJ9/7BIyezeXutXqfh05vszy2k3kSvhLesugsxIA71WsqBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.7.tgz", + "integrity": "sha512-7CcxgdlCD+zAPyveKoznbgr3i0Wnh0L8BDGRCjE/5UGkm5P/NQko51tuIDaYof8zbmXjjl0OIt9lSo4W7I8mrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.7.tgz", + "integrity": "sha512-GKCafP2j/KUljVC3nesw1wLFSZktb2FGCmoT1+730zIF5O6hNroo0bSEofm6ZK5mNPnLiSaiLyRB9YFgtkd5Xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.7.tgz", + "integrity": "sha512-5I1GeL/gZoUUdTPA0ws54bpYdtyeA2t6MNISalsHpY269zK8Jia/AXB3ta/KcDHv2SvNwabpImeIPXC/k0YW6A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.7.tgz", + "integrity": "sha512-CIGKCFpQOSlYsLMbxt8JjxxvVw9MlF1Rz2ABLVfFyHUF5OeqHD5fPhGrCVNaVrhO8Xrm+yFmtjcZudUGr5/WYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.7.tgz", + "integrity": "sha512-eOs1eSivOqN7cFiRIukEruWhaCf75V0N8P0zP7dh44LIhLl8y6/z++vv9qQVbkBm5/D7M7LfCfCTmt1f1wHOCw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/escalade": { "version": "3.2.0", "dev": true, diff --git a/src/i18n/languages/idID.ts b/src/i18n/languages/idID.ts new file mode 100644 index 000000000..2e400f454 --- /dev/null +++ b/src/i18n/languages/idID.ts @@ -0,0 +1,425 @@ +/** + * @license + * Copyright (c) 2025 Handsoncode. All rights reserved. + */ + +import {RawTranslationPackage} from '..' + +const dictionary: RawTranslationPackage = { + errors: { + CYCLE: '#SIKLUS!', + DIV_BY_ZERO: '#BAGI0!', + ERROR: '#GALAT!', + NA: '#N/A', + NAME: '#NAME?', + NUM: '#ANGKA!', + REF: '#REF!', + SPILL: '#TUMPAH!', + VALUE: '#NILAI!', + }, + functions: { + FILTER: 'FILTER', + ADDRESS: 'ALAMAT', + 'ARRAY_CONSTRAIN': 'BATASAN.MATRIKS', + ARRAYFORMULA: 'RUMUS.MATRIKS', + ABS: 'ABS', + ACOS: 'ACOS', + ACOSH: 'ACOSH', + ACOT: 'ACOT', + ACOTH: 'ACOTH', + AND: 'DAN', + ARABIC: 'ARAB', + ASIN: 'ASIN', + ASINH: 'ASINH', + ATAN2: 'ATAN2', + ATAN: 'ATAN', + ATANH: 'ATANH', + AVERAGE: 'RATA-RATA', + AVERAGEA: 'RATA-RATAA', + AVERAGEIF: 'RATA-RATA.JIKA', + BASE: 'BASIS', + BIN2DEC: 'BIN.DEC', + BIN2HEX: 'BIN.HEX', + BIN2OCT: 'BIN.OKT', + BITAND: 'BITDAN', + BITLSHIFT: 'BIT.GESER.KIRI', + BITOR: 'BITATAU', + BITRSHIFT: 'BIT.GESER.KANAN', + BITXOR: 'BITXOR', + CEILING: 'BATAS.ATAS', + CHAR: 'KARAKTER', + CHOOSE: 'PILIH', + CLEAN: 'BERSIHKAN', + CODE: 'KODE', + COLUMN: 'KOLOM', + COLUMNS: 'KOLOM2', + CONCATENATE: 'GABUNG', + CORREL: 'KOREL', + COS: 'COS', + COSH: 'COSH', + COT: 'COT', + COTH: 'COTH', + COUNT: 'HITUNG', + COUNTA: 'HITUNG.TIDAK.KOSONG', + COUNTBLANK: 'HITUNG.KOSONG', + COUNTIF: 'HITUNG.JIKA', + COUNTIFS: 'HITUNG.JIKAH', + COUNTUNIQUE: 'HITUNG.UNIK', + CSC: 'CSC', + CSCH: 'CSCH', + CUMIPMT: 'KUM.BUNGA', + CUMPRINC: 'KUM.POKOK', + DATE: 'TANGGAL', + DATEDIF: 'SELISIH.TANGGAL', + DATEVALUE: 'NILAI.TANGGAL', + DAY: 'HARI', + DAYS360: 'HARI360', + DAYS: 'HARI2', + DB: 'DB', + DDB: 'DDB', + DEC2BIN: 'DES.BIN', + DEC2HEX: 'DES.HEX', + DEC2OCT: 'DES.OKT', + DECIMAL: 'DESIMAL', + DEGREES: 'DERAJAT', + DELTA: 'DELTA', + DOLLARDE: 'DOLAR.DES', + DOLLARFR: 'DOLAR.PEC', + EDATE: 'EDATE', + EFFECT: 'EFEKTIF', + EOMONTH: 'AKHIR.BULAN', + ERF: 'ERF', + ERFC: 'ERFC', + EVEN: 'GENAP', + EXACT: 'IDENTIK', + EXP: 'EXP', + FALSE: 'SALAH', + FIND: 'TEMUKAN', + FORMULATEXT: 'TEKS.RUMUS', + FV: 'FV', + FVSCHEDULE: 'FV.JADWAL', + HEX2BIN: 'HEX.BIN', + HEX2DEC: 'HEX.DEC', + HEX2OCT: 'HEX.OKT', + HLOOKUP: 'HLOOKUP', + HOUR: 'JAM', + HYPERLINK: 'TAUTAN', + IF: 'JIKA', + IFERROR: 'JIKA.GALAT', + IFNA: 'JIKA.NA', + IFS: 'JIKAS', + INDEX: 'INDEKS', + INT: 'BULAT.BAWAH', + INTERVAL: 'INTERVAL', + IPMT: 'IPMT', + IRR: 'IRR', + ISBINARY: 'ADALAH.BINER', + ISBLANK: 'KOSONG', + ISERR: 'ADALAH.GALAT', + ISERROR: 'ADALAH.KESALAHAN', + ISEVEN: 'ADALAH.GENAP', + ISFORMULA: 'ADALAH.RUMUS', + ISLOGICAL: 'ADALAH.LOGIS', + ISNA: 'ADALAH.NA', + ISNONTEXT: 'ADALAH.BUKAN.TEKS', + ISNUMBER: 'ADALAH.NOMOR', + ISODD: 'ADALAH.GANJIL', + ISOWEEKNUM: 'ISO.MINGGU', + ISPMT: 'ISPMT', + ISREF: 'ADALAH.REFERENSI', + ISTEXT: 'ADALAH.TEKS', + LEFT: 'KIRI', + LEN: 'PANJANG', + LN: 'LN', + LOG10: 'LOG10', + LOG: 'LOG', + LOWER: 'HURUF.KECIL', + MATCH: 'COCOK', + MAX: 'MAX', + MAXA: 'MAKSA', + MAXIFS: 'MAKS.JIKAS', + MAXPOOL: 'KOLOM.MAKS', + MEDIAN: 'MEDIAN', + MEDIANPOOL: 'KOLOM.MEDIAN', + MID: 'TENGAH', + MIN: 'MIN', + MINA: 'MINA', + MINIFS: 'MIN.JIKAS', + MINUTE: 'MENIT', + MIRR: 'MIRR', + MMULT: 'MMULT', + MOD: 'MOD', + MONTH: 'BULAN', + N: 'N', + NA: 'NA', + NETWORKDAYS: 'JUMLAH.HARI.KERJA', + 'NETWORKDAYS.INTL': 'JUMLAH.HARI.KERJA.INTL', + NOMINAL: 'NOMINAL', + NOT: 'BUKAN', + NOW: 'SEKARANG', + NPER: 'NPER', + NPV: 'NPV', + OCT2BIN: 'OKT.BIN', + OCT2DEC: 'OKT.DEC', + OCT2HEX: 'OKT.HEX', + ODD: 'GANJIL', + OFFSET: 'OFSET', + OR: 'ATAU', + PI: 'PI', + PMT: 'PMT', + PDURATION: 'PDURATION', + PRODUCT: 'PRODUK', + POWER: 'PANGKAT', + PPMT: 'PPMT', + PROPER: 'HURUF.AWAL.BESAR', + PV: 'PV', + RADIANS: 'RADIAN', + RAND: 'ACAK', + RATE: 'SUKU.BUNGA', + REPLACE: 'GANTI', + REPT: 'ULANG', + RIGHT: 'KANAN', + ROMAN: 'ROMAWI', + ROUND: 'BULAT', + ROUNDDOWN: 'BULAT.KEBAWAH', + ROUNDUP: 'BULAT.KEATAS', + ROW: 'BARIS', + ROWS: 'BARIS2', + RRI: 'RRI', + SEARCH: 'CARI', + SEC: 'SEC', + SECH: 'SECH', + SECOND: 'DETIK', + SHEET: 'LEMBAR', + SHEETS: 'LEMBAR2', + SIN: 'SIN', + SINH: 'SINH', + SLN: 'GSL', + SPLIT: 'PISAH', + SQRT: 'AKAR', + STDEVA: 'STDEVA', + 'STDEV.P': 'STDEV.P', + STDEVPA: 'STDEVPA', + 'STDEV.S': 'STDEV.S', + SUBSTITUTE: 'SUBSTITUSI', + SUBTOTAL: 'SUBTOTAL', + SUM: 'JUMLAH', + SUMIF: 'JUMLAH.JIKA', + SUMIFS: 'JUMLAH.JIKAH', + SUMPRODUCT: 'PRODUK.JUMLAH', + SUMSQ: 'JUMLAH.KUADRAT', + SWITCH: 'BERALIH', + SYD: 'SYD', + T: 'T', + TAN: 'TAN', + TANH: 'TANH', + TBILLEQ: 'TBILL.SAMA', + TBILLPRICE: 'TBILL.HARGA', + TBILLYIELD: 'TBILL.HASIL', + TEXT: 'TEKS', + TIME: 'WAKTU', + TIMEVALUE: 'NILAI.WAKTU', + TODAY: 'HARI.INI', + TRANSPOSE: 'TRANSPOS', + TRIM: 'HAPUS.SPASI', + TRUE: 'BENAR', + TRUNC: 'POTONG', + UNICHAR: 'UNIKARAKTER', + UNICODE: 'UNICODE', + UPPER: 'HURUF.BESAR', + VALUE: 'NILAI', + VARA: 'VARA', + 'VAR.P': 'VAR.P', + VARPA: 'VARPA', + 'VAR.S': 'VAR.S', + VLOOKUP: 'VLOOKUP', + WEEKDAY: 'HARI.DALAM.MINGGU', + WEEKNUM: 'MINGGU.KE', + WORKDAY: 'HARI.KERJA.SELESAI', + 'WORKDAY.INTL': 'HARI.KERJA.SELESAI.INTL', + XNPV: 'XNPV', + XOR: 'XATAU', + XLOOKUP: 'XLOOKUP', + YEAR: 'TAHUN', + YEARFRAC: 'FRAC.TAHUN', + 'HF.ADD': 'HF.ADD', + 'HF.CONCAT': 'HF.CONCAT', + 'HF.DIVIDE': 'HF.DIVIDE', + 'HF.EQ': 'HF.EQ', + 'HF.GT': 'HF.GT', + 'HF.GTE': 'HF.GTE', + 'HF.LT': 'HF.LT', + 'HF.LTE': 'HF.LTE', + 'HF.MINUS': 'HF.MINUS', + 'HF.MULTIPLY': 'HF.MULTIPLY', + 'HF.NE': 'HF.NE', + 'HF.POW': 'HF.POW', + 'HF.UMINUS': 'HF.UMINUS', + 'HF.UNARY_PERCENT': 'HF.UNARY_PERCENT', + 'HF.UPLUS': 'HF.UPLUS', + VARP: 'VARP', + VAR: 'VAR', + STDEVP: 'STDEVP', + STDEV: 'STDEV', + 'EXPON.DIST': 'EXPON.DIST', + FISHER: 'FISHER', + FISHERINV: 'FISHERINV', + GAMMA: 'GAMMA', + 'GAMMA.DIST': 'GAMMA.DIST', + GAMMALN: 'GAMMALN', + 'GAMMALN.PRECISE': 'GAMMALN.PRECISE', + 'GAMMA.INV': 'GAMMA.INV', + GAUSS: 'GAUSS', + FACT: 'FAKTOR', + FACTDOUBLE: 'FAKTOR.GANDA', + COMBIN: 'KOMBINASI', + COMBINA: 'KOMBINASIA', + GCD: 'FPB', + LCM: 'KPK', + MROUND: 'BULATKAN.MULTIPLE', + MULTINOMIAL: 'MULTINOMIAL', + QUOTIENT: 'HASIL.BAGI', + RANDBETWEEN: 'ACAK.ANTARA', + SERIESSUM: 'JUMLAH.SERI', + SIGN: 'TANDA', + SQRTPI: 'AKAR.PI', + SUMX2MY2: 'JUMLAH.X2MINY2', + SUMX2PY2: 'JUMLAH.X2TAMY2', + SUMXMY2: 'JUMLAH.XMINY2', + 'EXPONDIST': 'EXPONDIST', + GAMMADIST: 'GAMMADIST', + GAMMAINV: 'GAMMAINV', + 'BETA.DIST': 'BETA.DIST', + BETADIST: 'BETADIST', + 'BETA.INV': 'BETA.INV', + BETAINV: 'BETAINV', + 'BINOM.DIST': 'BINOM.DIST', + BINOMDIST: 'BINOMDIST', + 'BINOM.INV': 'BINOM.INV', + BESSELI: 'BESSELI', + BESSELJ: 'BESSELJ', + BESSELK: 'BESSELK', + BESSELY: 'BESSELY', + 'CHISQ.DIST': 'CHISQ.DIST', + 'CHISQ.DIST.RT': 'CHISQ.DIST.RT', + 'CHISQ.INV': 'CHISQ.INV', + 'CHISQ.INV.RT': 'CHISQ.INV.RT', + CHIDIST: 'CHIDIST', + CHIINV: 'CHIINV', + 'F.DIST': 'F.DIST', + 'F.DIST.RT': 'F.DIST.RT', + 'F.INV': 'F.INV', + 'F.INV.RT': 'F.INV.RT', + FDIST: 'FDIST', + FINV: 'FINV', + WEIBULL: 'WEIBULL', + 'WEIBULL.DIST': 'WEIBULL.DIST', + POISSON: 'POISSON', + 'POISSON.DIST': 'POISSON.DIST', + 'HYPGEOM.DIST': 'HYPGEOM.DIST', + HYPGEOMDIST: 'HYPGEOMDIST', + 'T.DIST': 'T.DIST', + 'T.DIST.2T': 'T.DIST.2T', + 'T.DIST.RT': 'T.DIST.RT', + 'T.INV': 'T.INV', + 'T.INV.2T': 'T.INV.2T', + TDIST: 'TDIST', + TINV: 'TINV', + LOGINV: 'LOGINV', + 'LOGNORM.DIST': 'LOGNORM.DIST', + 'LOGNORM.INV': 'LOGNORM.INV', + LOGNORMDIST: 'LOGNORMDIST', + 'NORM.DIST': 'NORM.DIST', + 'NORM.INV': 'NORM.INV', + 'NORM.S.DIST': 'NORM.S.DIST', + 'NORM.S.INV': 'NORM.S.INV', + NORMDIST: 'NORMDIST', + NORMINV: 'NORMINV', + NORMSDIST: 'NORMSDIST', + NORMSINV: 'NORMSINV', + PHI: 'PHI', + 'NEGBINOM.DIST': 'NEGBINOM.DIST', + 'NEGBINOMDIST': 'NEGBINOMDIST', + COMPLEX: 'KOMPLEKS', + IMABS: 'IMABS', + IMAGINARY: 'IMAGINER', + IMARGUMENT: 'IMARGUMEN', + IMCONJUGATE: 'IMKONJUGASI', + IMCOS: 'IMCOS', + IMCOSH: 'IMCOSH', + IMCOT: 'IMCOT', + IMCSC: 'IMCSC', + IMCSCH: 'IMCSCH', + IMDIV: 'IMBAGI', + IMEXP: 'IMEKSP', + IMLN: 'IMLN', + IMLOG10: 'IMLOG10', + IMLOG2: 'IMLOG2', + IMPOWER: 'IMPANGKAT', + IMPRODUCT: 'IMPRODUK', + IMREAL: 'IMRIIL', + IMSEC: 'IMSEC', + IMSECH: 'IMSECH', + IMSIN: 'IMSIN', + IMSINH: 'IMSINH', + IMSQRT: 'IMAKAR', + IMSUB: 'IMKURANG', + IMSUM: 'IMJUMLAH', + IMTAN: 'IMTAN', + LARGE: 'BESAR', + SMALL: 'KECIL', + AVEDEV: 'RATA.SIMPANG', + CONFIDENCE: 'KEYAKINAN', + 'CONFIDENCE.NORM': 'KEYAKINAN.NORM', + 'CONFIDENCE.T': 'KEYAKINAN.T', + DEVSQ: 'KUADRAT.SIMPANG', + GEOMEAN: 'RATA.GEO', + HARMEAN: 'RATA.HARM', + CRITBINOM: 'KRIT.BINOM', + 'COVARIANCE.P': 'KOVAR.P', + 'COVARIANCE.S': 'KOVAR.S', + 'COVAR': 'KOVAR', + PEARSON: 'PEARSON', + RSQ: 'RKUADRAT', + STANDARDIZE: 'STANDARISASI', + 'Z.TEST': 'Z.UJI', + ZTEST: 'ZUJI', + 'F.TEST': 'F.UJI', + FTEST: 'FUJI', + STEYX: 'STEYX', + SLOPE: 'KEMIRINGAN', + 'CHISQ.TEST': 'CHISQ.UJI', + CHITEST: 'CHIUJI', + 'T.TEST': 'T.UJI', + TTEST: 'TUJI', + SKEW: 'SKEW', + 'SKEW.P': 'SKEW.P', + WEIBULLDIST: 'WEIBULLDIST', + VARS: 'VARS', + TINV2T: 'TINV2T', + TDISTRT: 'TDISTRT', + TDIST2T: 'TDIST2T', + STDEVS: 'STDEVS', + FINVRT: 'FINVRT', + FDISTRT: 'FDISTRT', + CHIDISTRT: 'CHIDISTRT', + CHIINVRT: 'CHIINVRT', + COVARIANCEP: 'COVARIANCEP', + COVARIANCES: 'COVARIANCES', + LOGNORMINV: 'LOGNORMINV', + POISSONDIST: 'POISSONDIST', + SKEWP: 'SKEWP', + 'CEILING.MATH': 'BATAS.ATAS.MATEMATIK', + FLOOR: 'BATAS.BAWAH', + 'FLOOR.MATH': 'BATAS.BAWAH.MATEMATIK', + 'CEILING.PRECISE': 'BATAS.ATAS.PRESISI', + 'FLOOR.PRECISE': 'BATAS.BAWAH.PRESISI', + 'ISO.CEILING': 'ISO.BATAS.ATAS', + }, + langCode: 'idID', + ui: { + NEW_SHEET_PREFIX: 'Lembar', + }, +} + +export default dictionary diff --git a/src/i18n/languages/index.ts b/src/i18n/languages/index.ts index c5eaed084..dbffca47a 100644 --- a/src/i18n/languages/index.ts +++ b/src/i18n/languages/index.ts @@ -12,6 +12,7 @@ export {default as esES} from './esES' export {default as fiFI} from './fiFI' export {default as frFR} from './frFR' export {default as huHU} from './huHU' +export {default as idID} from './idID' export {default as itIT} from './itIT' export {default as nbNO} from './nbNO' export {default as nlNL} from './nlNL'