Files
peptide-news-plugin/languages/peptide-news.pot
Terence b7da4f42b9 feat: add LLM cost tracking with budget enforcement and admin dashboard
- New Cost_Tracker class: logs every API call (model, tokens, cost), enforces
  monthly budgets with hard-stop mode, provides aggregated reporting
- New llm_costs database table with indexes on created_at, model, operation
- Modified LLM class: call_openrouter_with_usage() extracts token usage from
  OpenRouter responses; budget gate checks before each API call
- Admin settings: monthly budget (USD), enforcement mode (disabled/warn/hard-stop),
  cost log retention period
- Admin cost dashboard: budget progress bar, daily cost chart (Chart.js),
  per-model and per-operation breakdowns, recent API call log
- PHPUnit tests: 16 tests covering cost calculation, pricing lookups,
  budget enforcement logic, and model validation
- Updated ARCHITECTURE.md with new table schema, data flow, and key decisions
- Updated CONVENTIONS.md with "how to add cost tracking for a new operation"
- Version bump to 2.4.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 04:18:30 +07:00

372 lines
7.6 KiB
Plaintext
Executable File

# Peptide News Aggregator POT File
# Copyright (C) 2026 Peptide News Team
# This file is distributed under the GPL-2.0+.
#
msgid ""
msgstr ""
"Project-Id-Version: Peptide News Aggregator 1.0.0\n"
"Report-Msgid-Bugs-To: https://github.com/peptiderepo/peptide-news-plugin/issues\n"
"POT-Creation-Date: 2026-04-05 16:03+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin/class-peptide-news-admin.php:149
msgid "API Key"
msgstr ""
#: admin/partials/articles-list.php:42
msgid "Active"
msgstr ""
#: admin/class-peptide-news-admin.php:338
msgid "Add \"Peptide News\" from Appearance > Widgets."
msgstr ""
#: admin/class-peptide-news-admin.php:130
msgid "Add RSS feed URLs, one per line."
msgstr ""
#: admin/class-peptide-news-admin.php:154
msgid "Analytics"
msgstr ""
#: admin/class-peptide-news-admin.php:162
msgid "Analytics Data Retention (days)"
msgstr ""
#: admin/class-peptide-news-admin.php:285
msgid "Anonymize IP addresses for GDPR compliance"
msgstr ""
#: admin/class-peptide-news-admin.php:163
msgid "Anonymize IPs"
msgstr ""
#: admin/partials/dashboard.php:89
msgid "Article"
msgstr ""
#: admin/class-peptide-news-admin.php:161
msgid "Article Retention (days)"
msgstr ""
#: admin/class-peptide-admin.php:98
#: admin/class-peptide-news-admin.php:99
#: admin/partials/dashboard.php:124
msgid "Articles"
msgstr ""
#: admin/partials/dashboard.php:55
msgid "Articles Clicked"
msgstr ""
#: admin/class-peptide-news-admin.php:122
msgid "Articles to Display"
msgstr ""
#: admin/partials/dashboard.php:59
msgid "Avg Clicks / Article"
msgstr ""
#: admin/partials/articles-list.php:38
#: admin/partials/dashboard.php:91
msgid "Categories"
msgstr ""
#: admin/partials/dashboard.php:66
msgid "Click Trends"
msgstr ""
#: admin/partials/dashboard.php:92
msgid "Clicks"
msgstr ""
#: admin/class-peptide-news-admin.php:225
msgid "Comma-separated keywords for NewsAPI searches."
msgstr ""
#: admin/class-peptide-news-admin.php:156
msgid "Configure click tracking and data retention."
msgstr ""
#: admin/class-peptide-news-admin.php:116
msgid "Configure how and when peptide news articles are fetched."
msgstr ""
#: admin/class-peptide-news-admin.php:194
msgid "Daily"
msgstr ""
#: admin/partials/dashboard.php:73
msgid "Device Breakdown"
msgstr ""
#: public/class-peptide-news-public.php:260
msgid "Displays the latest peptide research news."
msgstr ""
#: admin/class-peptide-news-admin.php:148
msgid "Enable NewsAPI"
msgstr ""
#: admin/class-peptide-news-admin.php:135
msgid "Enable RSS Feeds"
msgstr ""
#: includes/class-peptide-news-fetcher.php:22
msgid "Every 15 Minutes"
msgstr ""
#: admin/class-peptide-news-admin.php:188
msgid "Every 15 minutes"
msgstr ""
#: includes/class-peptide-news-fetcher.php:26
msgid "Every 30 Minutes"
msgstr ""
#: admin/class-peptide-news-admin.php:189
msgid "Every 30 minutes"
msgstr ""
#: includes/class-peptide-news-fetcher.php:30
msgid "Every 4 Hours"
msgstr ""
#: admin/class-peptide-news-admin.php:191
msgid "Every 4 hours"
msgstr ""
#: includes/class-peptide-news-fetcher.php:34
msgid "Every 6 Hours"
msgstr ""
#: admin/class-peptide-news-admin.php:192
msgid "Every 6 hours"
msgstr ""
#: admin/partials/dashboard.php:40
msgid "Export CSV"
msgstr ""
#: admin/class-peptide-news-admin.php:309
msgid "Fetch Articles Now"
msgstr ""
#: admin/class-peptide-news-admin.php:121
msgid "Fetch Interval"
msgstr ""
#: admin/class-peptide-news-admin.php:250
msgid "Fetch articles from NewsAPI.org"
msgstr ""
#: admin/class-peptide-news-admin.php:233
msgid "Fetch articles from RSS feeds"
msgstr ""
#: admin/class-peptide-news-admin.php:300
msgid "Fetch completed!"
msgstr ""
#: admin/partials/articles-list.php:40
msgid "Fetched"
msgstr ""
#: admin/partials/dashboard.php:39
msgid "Filter"
msgstr ""
#: admin/class-peptide-news-admin.php:319
msgid "Found"
msgstr ""
#: admin/partials/dashboard.php:35
msgid "From:"
msgstr ""
#: admin/class-peptide-news-admin.php:114
msgid "General Settings"
msgstr ""
#: admin/class-peptide-news-admin.php:190
msgid "Hourly"
msgstr ""
#: admin/class-peptide-news-admin.php:277
msgid "How long to keep click analytics data."
msgstr ""
#: admin/class-peptide-news-admin.php:268
msgid "How long to keep fetched articles before deactivating them."
msgstr ""
#: admin/class-peptide-news-admin.php:207
msgid "How often to check for new articles. After changing, deactivate and reactivate the plugin."
msgstr ""
#: includes/class-peptide-news-rest-api.php:117
msgid "Invalid date format for %s. Expected Y-m-d."
msgstr ""
#: admin/class-peptide-news-admin.php:317
msgid "Last fetch"
msgstr ""
#: admin/class-peptide-news-admin.php:321
msgid "New stored"
msgstr ""
#: admin/class-peptide-news-admin.php:141
msgid "NewsAPI.org"
msgstr ""
#: admin/partials/articles-list.php:47
msgid "No articles found. Run a fetch first."
msgstr ""
#: admin/partials/dashboard.php:98
msgid "No click data for this period."
msgstr ""
#: public/class-peptide-news-public.php:84
msgid "No peptide news articles available yet. Check back soon!"
msgstr ""
#: admin/partials/dashboard.php:129
msgid "No topic data for this period."
msgstr ""
#: admin/class-peptide-news-admin.php:216
msgid "Number of articles to display in the shortcode/widget."
msgstr ""
#: public/class-peptide-news-public.php:296
msgid "Number of articles:"
msgstr ""
#: admin/class-peptide-news-admin.php:143
msgid "Optional. Get a free API key at newsapi.org."
msgstr ""
#: admin/class-peptide-news-admin.php:76
#: admin/class-peptide-news-admin.php:77
#: public/class-peptide-news-public.php:258
#: ... and 2 more
msgid "Peptide News"
msgstr ""
#: admin/partials/dashboard.php:30
msgid "Peptide News Analytics"
msgstr ""
#: admin/partials/dashboard.php:117
msgid "Popular Topics"
msgstr ""
#: admin/partials/articles-list.php:39
msgid "Published"
msgstr ""
#: admin/class-peptide-news-admin.php:128
msgid "RSS Feed Sources"
msgstr ""
#: admin/class-peptide-news-admin.php:136
msgid "RSS Feed URLs"
msgstr ""
#: admin/class-peptide-news-admin.php:123
msgid "Search Keywords"
msgstr ""
#: admin/class-peptide-news-admin.php:88
#: admin/class-peptide-news-admin.php:89
msgid "Settings"
msgstr ""
#: admin/class-peptide-news-admin.php:335
msgid "Shortcode:"
msgstr ""
#: admin/partials/articles-list.php:37
#: admin/partials/dashboard.php:90
msgid "Source"
msgstr ""
#: admin/partials/dashboard.php:77
msgid "Source Performance"
msgstr ""
#: admin/partials/articles-list.php:30
msgid "Stored Articles"
msgstr ""
#: admin/partials/articles-list.php:41
msgid "Thumb"
msgstr ""
#: admin/partials/articles-list.php:36
msgid "Title"
msgstr ""
#: public/class-peptide-news-public.php:288
msgid "Title:"
msgstr ""
#: admin/partials/dashboard.php:37
msgid "To:"
msgstr ""
#: admin/partials/dashboard.php:84
msgid "Top Articles"
msgstr ""
#: admin/partials/dashboard.php:122
msgid "Topic"
msgstr ""
#: admin/partials/dashboard.php:47
#: admin/partials/dashboard.php:123
msgid "Total Clicks"
msgstr ""
#: admin/class-peptide-news-admin.php:193
msgid "Twice daily"
msgstr ""
#: admin/class-peptide-news-admin.php:362
msgid "Unauthorized."
msgstr ""
#: admin/partials/dashboard.php:93
msgid "Unique"
msgstr ""
#: admin/partials/dashboard.php:51
msgid "Unique Visitors"
msgstr ""
#: admin/class-peptide-news-admin.php:334
msgid "Usage"
msgstr ""
#: admin/class-peptide-news-admin.php:337
msgid "Widget:"
msgstr ""
#: includes/class-peptide-news-rest-api.php:74
msgid "You do not have permission to access analytics data."
msgstr ""
#: admin/class-peptide-news-admin.php:336
msgid "or"
msgstr ""