diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
index 5af6a13c50..b7f7cb41a5 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
@@ -1,5 +1,161 @@
{
"culture": "tr",
"texts": {
+ "Permission:Organizations": "Organizasyonlar",
+ "Permission:Manage": "Organizasyonları Yönet",
+ "Permission:DiscountRequests": "İndirim Talepleri",
+ "Permission:DiscountManage": "İndirim Taleplerini Yönet",
+ "Permission:Disable": "Devre Dışı Bırak",
+ "Permission:Enable": "Etkinleşir",
+ "Permission:EnableSendEmail": "E-Posta Göndermeyi Etkinleştir",
+ "Permission:SendEmail": "E-Posta Gönder",
+ "Permission:NpmPackages": "NPM Paketleri",
+ "Permission:NugetPackages": "Nuget Paketleri",
+ "Permission:Maintenance": "Bakım",
+ "Permission:Maintain": "Bakım Yap",
+ "Permission:ClearCaches": "Önbelleği temizle",
+ "Permission:Modules": "Modüller",
+ "Permission:Packages": "Paketler",
+ "Permission:Edit": "Güncelle",
+ "Permission:Delete": "Sil",
+ "Permission:Create": "Oluştur",
+ "Permission:Accounting": "Muhasebe",
+ "Permission:Accounting:Quotation": "Fiyatlandırma",
+ "Permission:Accounting:Invoice": "Fatura",
+ "Menu:Organizations": "Organizasyonlar",
+ "Menu:Accounting": "Muhasebe",
+ "Menu:Packages": "Paketler",
+ "Menu:DiscountRequests": "İndirim Talepleri",
+ "NpmPackageDeletionWarningMessage": "Bu NPM Paketi silinecektir. Onaylıyor musunuz?",
+ "NugetPackageDeletionWarningMessage": "Bu Nuget Paketi silinecektir. Onaylıyor musunuz?",
+ "ModuleDeletionWarningMessage": "Bu Modül silinecektir. Onaylıyor musunuz?",
+ "Name": "İsim",
+ "DisplayName": "Görüntülenen isim",
+ "ShortDescription": "Kısa açıklama",
+ "NameFilter": "İsim",
+ "CreationTime": "Oluşturma zamanı",
+ "IsPro": "Is pro",
+ "ShowOnModuleList": "Modül listesinde göster",
+ "EfCoreConfigureMethodName": "Metot adını yapılandır",
+ "IsProFilter": "Is pro",
+ "ApplicationType": "Uygulama tipi",
+ "Target": "Hedef",
+ "TargetFilter": "Hedef",
+ "ModuleClass": "Modül sınıfı",
+ "NugetPackageTarget.DomainShared": "Domain Shared",
+ "NugetPackageTarget.Domain": "Domain",
+ "NugetPackageTarget.Application": "Application",
+ "NugetPackageTarget.ApplicationContracts": "Application Contracts",
+ "NugetPackageTarget.HttpApi": "Http Api",
+ "NugetPackageTarget.HttpApiClient": "Http Api Client",
+ "NugetPackageTarget.Web": "Web",
+ "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core",
+ "NugetPackageTarget.MongoDB": "MongoDB",
+ "Edit": "Güncelle",
+ "Delete": "Sil",
+ "Refresh": "Yenile",
+ "NpmPackages": "NPM Paketleri",
+ "NugetPackages": "Nuget Paketleri",
+ "NpmPackageCount": "NPM Paket Sayısı",
+ "NugetPackageCount": "Nuget Paket Sayısı",
+ "Module": "Modüller",
+ "ModuleInfo": "Modül bilgisi",
+ "CreateANpmPackage": "Bir NPM paketi oluştur",
+ "CreateAModule": "Bir modül oluştur",
+ "CreateANugetPackage": "Bir Nuget paketi oluştur",
+ "AddNew": "Yenisini Ekle",
+ "PackageAlreadyExist{0}": "\"{0}\"isimli paket zaten eklendi.",
+ "ModuleAlreadyExist{0}": "\"{0}\" isimli modül zaten eklendi.",
+ "ClearCache": "Önbelleği Temizle",
+ "SuccessfullyCleared": "Başarıyla temizlendi",
+ "Menu:NpmPackages": "NPM Paketleri",
+ "Menu:Modules": "Modüller",
+ "Menu:Maintenance": "Bakım",
+ "Menu:NugetPackages": "Nuget Paketleri",
+ "CreateAnOrganization": "Bir organizasyon oluştur",
+ "Organizations": "Organizasyonlar",
+ "LongName": "Uzun isim",
+ "LicenseType": "Lisans tipi",
+ "MissingLicenseTypeField": "Lisans tipi alanı zorunludur.",
+ "LicenseStartTime": "Lisans başlama zamanı",
+ "LicenseEndTime": "Lisans bitiş zamanı",
+ "AllowedDeveloperCount": "İzin verilen developer sayısı",
+ "UserNameOrEmailAddress": "Kullanıcı adı veya e-posta adresi",
+ "AddOwner": "Owner ekle",
+ "UserName": "Kullanıcı Adı",
+ "Email": "E-Posta",
+ "Developers": "Developers",
+ "AddDeveloper": "Developer Ekle",
+ "Create": "Oluştur",
+ "UserNotFound": "Kullanıcı bulunamadı",
+ "{0}WillBeRemovedFromDevelopers": "{0} kullanıcı adlı developer silinecektir, Onaylıyor musunuz?",
+ "{0}WillBeRemovedFromOwners": "{0} kullanıcı adlı owner silinecektir, Onaylıyor musunuz?",
+ "Computers": "Bilgisayarlar",
+ "UniqueComputerId": "Özgün bilgisayar id",
+ "LastSeenDate": "Son görülme tarihi",
+ "{0}Computer{1}WillBeRemovedFromRecords": "{0} kullanıcı isimli kullanıcının bilgisayarı ({1}) kayıtlardan kaldırılacaktır",
+ "OrganizationDeletionWarningMessage": "Organizasyon silinecektir.",
+ "DeletingLastOwnerWarningMessage": "Bir organizasyon en az bir ownera sahip olmalıdır! Bu nedenle bu ownerı kaldıramazsınız",
+ "This{0}AlreadyExistInThisOrganization": "{0} zaten bu organizasyonda bulunmaktadır",
+ "AreYouSureYouWantToDeleteAllComputers": "Tüm bilgisayaları silmek istediğinize emin misiniz?",
+ "DeleteAll": "Tümünü sil",
+ "DoYouWantToCreateNewUser": "Yeni kullanıcı oluşturmak istiyor musunuz?",
+ "MasterModules": "Master Modüller",
+ "OrganizationName": "Organizasyon adı",
+ "OrganizationNamePlaceholder": "Organizasyon adı...",
+ "UsernameOrEmail": "Kullanıcı adı veya e-posta",
+ "UsernameOrEmailPlaceholder": "Kullanıcı adı veya e-posta",
+ "Member": "Üye",
+ "PurchaseOrderNo": "Satın alma sipariş no",
+ "QuotationDate": "Fiyatlandırma tarihi",
+ "CompanyName": "Şirket adı",
+ "CompanyAddress": "Şirket adresi",
+ "Price": "Fiyat",
+ "DiscountText": "İndirim metni",
+ "DiscountQuantity": "İndirim miktarı",
+ "DiscountPrice": "İndirim fiyatı",
+ "Quotation": "Fiyatlandırma",
+ "ExtraText": "Eksta metin",
+ "ExtraAmount": "Eksta miktar",
+ "DownloadQuotation": "Fiyatlandırmayı İndir",
+ "Invoice": "Fatura",
+ "TaxNumber": "Vergi Numarası",
+ "InvoiceNumber": "Fatura Numarası",
+ "InvoiceDate": "Fatura Tarihi",
+ "InvoiceNote": "Fatura Notu",
+ "Quantity": "Miktar",
+ "AddProduct": "Ürün Ekle",
+ "AddProductWarning": "Ürün eklemelisiniz!",
+ "TotalPrice": "Toplam Fiyat",
+ "Generate": "Üret",
+ "MissingQuantityField": "Miktar alanı zorunludur!",
+ "MissingPriceField": "Fiyat alanı zorunludur!",
+ "CodeUsageStatus": "Statü",
+ "Country": "Ülke",
+ "DeveloperCount": "Developer Sayısı",
+ "RequestCode": "Talep Kodu",
+ "WebSite": "Web Sitesi",
+ "GithubUsername": "Github Kullanıcı adı",
+ "PhoneNumber": "Telefon Numarası",
+ "ProjectDescription": "Proje Açıklaması",
+ "Referrer": "Yönlendiren",
+ "DiscountRequests": "İndirim Talebi",
+ "Copylink": "Kopyalama Linki",
+ "Disable": "Devre Dışı Bırak",
+ "Enable": "Etkinleştir",
+ "EnableSendEmail": "E-Posta Göndermeyi Etkinleştir",
+ "SendEmail": "E-Posta Gönder",
+ "SuccessfullyDisabled": "Başarıyla Devre Dışı Bırakıldı",
+ "SuccessfullyEnabled": "Başarıyla Etkinleştirildi",
+ "EmailSent": "E-Posta Gönderildi",
+ "SuccessfullySent": "Başarıyla Gönderildi",
+ "SuccessfullyDeleted": "Başarıyla Silindi",
+ "DiscountRequestDeletionWarningMessage": "İndirim talebi silinecektir",
+ "BusinessType": "İş tipi",
+ "TotalQuestionCount": "Toplam soru sayısı",
+ "RemainingQuestionCount": "Kalan soru sayısı",
+ "TotalQuestionMustBeGreaterWarningMessage": "Toplam soru sayısı kalan soru sayısından büyük olmalıdır!",
+ "QuestionCountsMustBeGreaterThanZero": "Toplam soru sayısı ve kalan soru sayısı sıfır veya sıfırdan daha büyük olmalıdır!",
+ "UnlimitedQuestionCount": "Sınırsız soru sayısı"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
index 767346cd5e..1a25bde775 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"Volo.AbpIo.Domain:010004": "Maksimum üye sayısı aşıldı!",
@@ -18,12 +18,14 @@
"ReadyToGetStarted?": "Başlamaya hazır mısın?",
"JoinOurCommunity": "Topluluğumuza katılın",
"GetStartedUpper": "BAŞLAYIN",
+ "ForkMeOnGitHub": "Fork me on GitHub",
"Features": "Özellikler",
"GetStarted": "Başlayın",
"Documents": "Dokümanlar",
"Community": "Topluluk",
"ContributionGuide": "Katkı Rehberi",
"Blog": "Blog",
+ "Commercial": "Ticari",
"SeeDocuments": "Dokümanlara Göz Atın"
}
-}
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
index 77dab7302e..90db761f1b 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"OrganizationManagement": "Organizasyon yönetimi",
@@ -6,6 +6,8 @@
"Volo.AbpIo.Commercial:010003": "Bu organizasyonda yetkili değilsiniz!",
"OrganizationNotFoundMessage": "Organizasyon bulunamadı!",
"DeveloperCount": "Yazılımcı sayısı",
+ "QuestionCount": "Kalan / toplam sorular",
+ "Unlimited": "Sınırsız",
"Owners": "Yetkili sayısı",
"AddMember": "Üye ekle",
"AddOwner": "Yetkili ekle",
@@ -19,12 +21,15 @@
"StartDate": "Başlangıç tarihi",
"EndDate": "bitiş tarihi",
"Modules": "Modüller",
- "Volo.AbpIo.Commercial:010004": "Kullanıcı bulunamadı! İlgili kullanıcının daha önceden sisteme kayıt olmuş olması gerekiyor.",
"LicenseExtendMessage": "Lisans bitiş tarihiniz {0} tarihine kadar uzatıldı",
"LicenseUpgradeMessage": "Lisansınız {0} lisansa yükseltildi",
"LicenseAddDeveloperMessage": "Lisansınıza {0} geliştirici eklendi",
- "MyOrganizations": "Organizasyonlarım",
- "ApiKey": "API anahtarı",
- "UserNameNotFound": "{0} kullanıcı adı ile bir kullanıcı yok"
+ "Volo.AbpIo.Commercial:010004": "Kullanıcı bulunamadı! İlgili kullanıcının daha önceden sisteme kayıt olmuş olması gerekiyor.",
+ "MyOrganizations": "Organizasyonlarım",
+ "ApiKey": "API anahtarı",
+ "UserNameNotFound": "{0} kullanıcı adı ile bir kullanıcı yok",
+ "SuccessfullyAddedToNewsletter": "Bültenimize abone olduğunuz için teşekkürler!",
+ "MyProfile": "Profilim",
+ "EmailNotValid": "Lütfen uygun bir e-posta adresi giriniz"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
index 5af6a13c50..5f423e940b 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
@@ -1,5 +1,161 @@
{
"culture": "tr",
"texts": {
+ "GetStarted": "Başlamak - Başlangıç Templateleri",
+ "Create": "Oluştur",
+ "NewProject": "Yeni Proje",
+ "DirectDownload": "Doğrudan İndir",
+ "ProjectName": "Proje ismi",
+ "ProjectType": "Proje tipi",
+ "DatabaseProvider": "Veritabanı sağlayacısı",
+ "NTier": "N-Tier",
+ "IncludeUserInterface": "Kullanıcı arayüzünü dahil et",
+ "CreateNow": "Şimdi oluştur",
+ "TheStartupProject": "Başlangıç projesi",
+ "Tutorial": "Öğretici",
+ "UsingCLI": "CLI Kullanmak",
+ "SeeDetails": "Detayları Görüntüle",
+ "AbpShortDescription": "ABP modern web uygulamaları geliştirmek için eksiksiz bir mimari ve günlü bir altyapıdır! Size SOLID geliştirme tecrübelerini sunmak için en iyi uygulama ve kuralları takip eder.",
+ "SourceCodeUpper": "KAYNAK KOD",
+ "LatestReleaseLogs": "Son release kayıtları",
+ "Infrastructure": "Altyapı",
+ "Architecture": "Mimari",
+ "Modular": "Modüler",
+ "DontRepeatYourself": "Kendini Tekrar Etme",
+ "DeveloperFocused": "Developer Odaklı",
+ "FullStackApplicationInfrastructure": "Full stack uygulama altyapısı",
+ "DomainDrivenDesign": "Domain Driven Design",
+ "DomainDrivenDesignExplanation": "DDD paterni ve prensiplerinden yola çıkarak dizayn edildi ve geliştirildi. Uygulamanız için katmanlı bir model sunmaktadır.",
+ "Authorization": "Yetkilendirme",
+ "AuthorizationExplanation": "Kullanıcı, rol ve ayrıntılı izin sistemi ile modern yetkilendirme. Microsoft Identity library üzerine kurulmuştur.",
+ "MultiTenancy": "Multi-Tenancy",
+ "MultiTenancyExplanationShort": "SaaS uygulamaları kolaylaştı! Veritababından kullanıcı arayüzüne entegre edilmiş multi-tenancy",
+ "CrossCuttingConcerns": "Cross Cutting Concerns",
+ "CrossCuttingConcernsExplanationShort": "Yetkilendirme, validasyon, hata yakalama, caching, audit logging, işlem yönetimi ve bunun gibi konular için eksiksiz altyapı.",
+ "BuiltInBundlingMinification": "Hazır Paketleme & Küçültme",
+ "BuiltInBundlingMinificationExplanation": "Paketleme ve küçültmek için external araçları kullanmayı bırakın. ABP daha basit, dinamik, güçlü, modüler ve hazır yolları öneriyor.",
+ "VirtualFileSystem": "Sanal Dosya Sistemi",
+ "VirtualFileSystemExplanation": "Sayfaları, scriptleri, stilleri, resimleri... paketlere/kütüpanelere gömün ve farklı uygulamalarda yeniden kullanın. ",
+ "Theming": "Theming",
+ "ThemingExplanationShort": "Bootstrap tabanlı standart kullanıcı arayüzlerini kullan ve kişiselleştir veya kendin yeni bir tane oluştur.",
+ "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dinamik Formlar",
+ "BootstrapTagHelpersDynamicFormsExplanation": "Bootstrap komponentlerinin tekrar eden detaylarını manuel olarak yazmak yerine, Bu işlemi basitleştirmek ve iyileştirme avantajından faydalanmak için ABP'nin tag helperlarını kullanın. Dinamik form bir C# sınıfından model olarak eksiksik form oluşturabilir.",
+ "HTTPAPIsDynamicProxies": "HTTP APIs & Dynamic Proxies",
+ "HTTPAPIsDynamicProxiesExplanation": "Application servislerini otomatik olarak Rest stil Http API olarak ayarlayın ve dinamaik Javascript & C# proxyler ile kullanın.",
+ "CompleteArchitectureInfo": "Bakım yapılabilir yazılım çözümleri üretmek için modern mimari.",
+ "DomainDrivenDesignBasedLayeringModelExplanation": "DDD tabanlı bir katmanlı mimari geliştirmek ve bakım yapılabilir bir kod altyapısı inşaa etmek için size yardım eder.",
+ "DomainDrivenDesignBasedLayeringModelExplanationCont": "DDD patern ve prensiplerinden yola çıkarak uygulamanızı geliştirmeye yardımcı olmak için başlanıç templateler, soyutlamalar, base sınıflar, servisler, dokümantasyon ve rehberlik sağlar. ",
+ "MicroserviceCompatibleModelExplanation": "Core framework & pre-build modüller mikroservis mimari göz önünde bulundurularak dizayn edildi.",
+ "MicroserviceCompatibleModelExplanationCont": "Microservice çözümlerini daha kolay geliştirmek için altyapı, entegrasyon, örnekler ve dokümantasyon sunarken eğer bir tek parça uygulama istiyorsanız ek karmaşıklık getirmez.",
+ "ModularInfo": "ABP yeniden kullanılabilir uygulama modülleri geliştirebilmenize izin veren eksiksiz modüler sistem sunar.",
+ "PreBuiltModulesThemes": "Pre-Built Modüller & Temalar",
+ "PreBuiltModulesThemesExplanation": "Açık kaynak ve ticari modüller & temalar iş uygulamanızda kullanıma hazırdır.",
+ "NuGetNPMPackages": "NUGET & NPM Packages",
+ "NuGetNPMPackagesExplanation": "NUGET & NPM paketleri olarak dağıtılmıştır. Yüklemek ve güncellemek kolaydır.",
+ "ExtensibleReplaceable": "Genişletilebilir/Değiştirilebilir",
+ "ExtensibleReplaceableExplanation": "Tüm sevisler & modüller genişletilebilirlik göz önünde bulundurularak dizayn edildi. Servislerin, sayfaların stillerin, komponentlerin vb. yerlerini değiştirebilirsizinz.",
+ "CrossCuttingConcernsExplanation2": "Kodunu daha temiz tut ve kendi uygulama koduna odaklan.",
+ "CrossCuttingConcernsExplanation3": "Ortak uygulama isterlerini tekrar ve tekrar geliştirmek için zaman harcamayın.",
+ "AuthenticationAuthorization": "Kimlik Doğrulama & Yetkilendirme",
+ "ExceptionHandling": "Hata yakalama",
+ "Validation": "Validasyon",
+ "DatabaseConnection": "Veritabanı bağlantısı",
+ "TransactionManagement": "İşlem yönetimi",
+ "AuditLogging": "Audit Logging",
+ "Caching": "Caching",
+ "Multitenancy": "Multitenancy",
+ "DataFiltering": "Date filtreleme",
+ "ConventionOverConfiguration": "Yapılandırma Üzerinde Kurallar",
+ "ConventionOverConfigurationExplanation": "ABP minimal veya sıfır yapılandırma ile ortak uygulama kurallarını varsayılan olarak uygular.",
+ "ConventionOverConfigurationExplanationList1": "Dependency injection için bilinen servisler otomatik olarak kaydedilir.",
+ "ConventionOverConfigurationExplanationList2": "Application servisler isimlerdirme kuralları ile HTTP API ler olarak uygulanır.",
+ "ConventionOverConfigurationExplanationList3": "C# ve JavaScript için dinamik HTTP istemci proxyleri yaratır.",
+ "ConventionOverConfigurationExplanationList4": "Entityleriniz için varsayılaan repositoriler sunar.",
+ "ConventionOverConfigurationExplanationList5": "Her web request veya application servis metodu için Unit of Work işlemini yönetir.",
+ "ConventionOverConfigurationExplanationList6": "Entityleriniz için oluşturma, güncelleme & silme işlemlerini yayınlar.",
+ "BaseClasses": "Ana Sınıflar",
+ "BaseClassesExplanation": "Ortak uygulama paternleri için pre-built ana sınıflar.",
+ "DeveloperFocusedExplanation": "ABP developerlar içindir.",
+ "DeveloperFocusedExplanationCont": "İhtiyacınız olduğunda düşük seviyede çalışmanızı kısıtlamadan günlük yazılım geliştirmenizi basitleştirmeyi amaçlar.",
+ "SeeAllFeatures": "Tüm Özellikleri Görüntüle",
+ "CLI_CommandLineInterface": "CLI (Command Line Interface)",
+ "CLI_CommandLineInterfaceExplanation": "CLI yeni proje oluşturma ve uygulamanıza modüller ekleme işlemlerini otomatik hale getirir.",
+ "StartupTemplates": "Başlangıç Templateler",
+ "StartupTemplatesExplanation": "Çeşitli başlangıç templateleri size geliştirme başlatmak için tam yapılandırılmış bir çözüm sağlar.",
+ "BasedOnFamiliarTools": "Bilinen Araçlara Dayalı ",
+ "BasedOnFamiliarToolsExplanation": "Zaten bildiğiniz popüler araçlar ile geliştirilme ve egtegre edilmiştir. Düşük öğrenme eğrisi, koaly adaptasyon, rahat geliştirme.",
+ "ORMIndependent": "ORM Bağımsız",
+ "ORMIndependentExplanation": "",
+ "Features": "ABP Framework Özelliklerini Keşfet",
+ "ABPCLI": "ABP CLI",
+ "Modularity": "Modülerlik",
+ "BootstrapTagHelpers": "Bootstrap Tag Helpers",
+ "DynamicForms": "Dinamik Formlar",
+ "BundlingMinification": "Paketleme & Küçültme",
+ "BackgroundJobs": "Arkaplan İşleri",
+ "DDDInfrastructure": "DDD altyapısı",
+ "DomainDrivenDesignInfrastructure": "Domain Driven Design Altyapısı",
+ "AutoRESTAPIs": "Otomatik REST APIler",
+ "DynamicClientProxies": "Dinamik Client Proxies",
+ "DistributedEventBus": "Dağıtılmış Event Bus",
+ "DistributedEventBusWithRabbitMQIntegration": "RabbitMQ Entegrasyonu ile Dağıtılmış Event Bus",
+ "TestInfrastructure": "Test ALtyapısı",
+ "AuditLoggingEntityHistories": "Audit Logging & Entity Histories",
+ "ObjectToObjectMapping": "Object to Object Mapping",
+ "EmailSMSAbstractions": "E-Posta & SMS Soyutlamaları",
+ "EmailSMSAbstractionsWithTemplatingSupport": "Template Destekli E-Posta & SMS Soyutlamaları",
+ "Localization": "Localization",
+ "SettingManagement": "Ayar Yönetimi",
+ "ExtensionMethods": "Extension Methods",
+ "ExtensionMethodsHelpers": "Extension Methods & Helpers",
+ "AspectOrientedProgramming": "Aspect Oriented Programming",
+ "DependencyInjection": "Dependency Injection",
+ "DependencyInjectionByConventions": "Dependency Injection by Conventions",
+ "ABPCLIExplanation": "ABP CLI (Command Line Interface) ABP tabanlı çözümler ortak işlemleri gerçekleştiren bir komut satırı aracıdır.",
+ "ModularityExplanation": "ABP, entityleri, servisleri, veritabanı entegrasyonu, APIleri, UI komponentleri ve bunun gibi özelliklere sahip olabilecek kendi uygulama modüllerini geliştirmeniz için eksiksiz bir altyapı sağlar. ",
+ "MultiTenancyExplanation": "ABP framework sadece multi-tenant uygulama geliştirmenizi desteklemekle kalmaz aynı zamanda kodunuzun çoğunlukla tenantların birbirinden haberi olmaycak şekilde olmasını sağlar.",
+ "MultiTenancyExplanation2": "Anlık tenant'ı otomatik olarak belirleybilir, farklı tenantların verilerini birbirlerinden izole edebilir.",
+ "MultiTenancyExplanation3": "Tek bir veritabanını, her tenant için ayrı bir veritabanını ve hibrid yaklaşımları destekler.",
+ "MultiTenancyExplanation4": "Sen kendi uygulama kodunu odaklan ve bırak framework sizin adınıza multi-tenancy üstesinden gelsin.",
+ "BootstrapTagHelpersExplanation": "Bootstrap komponentlerinin tekrar eden detaylarını manuel olarak yazmak yerine, Bu işlemi basitleştirmek ve iyileştirme avantajından faydalanmak için ABP'nin tag helperlarını kullanın. Dinamik form bir C# sınıfından model olarak eksiksik form oluşturabilir.",
+ "DynamicFormsExplanation": "Dinamik form & input tag helpers bir C# sınıfından model olarak eksiksik form oluşturabilir.",
+ "AuthenticationAuthorizationExplanation": "ASP.NET Core Identity & IdentityServer4 ile entegre edilmiş zengin kimlik doğrulama ve yetkilendirme opsiyonları. Genişletilebilir ve detaylandırılabilr bir izin sistemi sunar.",
+ "CrossCuttingConcernsExplanation": "Tüm bu ortak şeyleri geliştirmek için kendini sürekli tekrar etme. Kendi iş koduna odaklan ve bırak ABP bunları kurallar ile otomatik hale getirsin.",
+ "DatabaseConnectionTransactionManagement": "Veritabanı Bğlantısı & İşlem Yönetimi",
+ "CorrelationIdTracking": "Correlation-Id Tracking",
+ "BundlingMinificationExplanation": "ABP daha basit, dinamik, güçlü, modüler ve hazır paketlenmiş ve küçültülmüş sistemi öneriyor.",
+ "VirtualFileSystemnExplanation": "Sanal Dosya Sistemi fiziksel olarak disk üzerinde var olmayan dosyalarını yönetmeyi mümkün kılmaktadır. Bunlar genellikle önceden assemblyler içerisinde gömülü olan(js,css,image,cshtml..) dosyalardır ve bunlar fiziksel dosylar gibi runtimeda kullanılır.",
+ "ThemingExplanation": "Theming sistem son Bootstrap Framework tabanlı ortak bir kütüphane ve layout tanımlayarak uygulamanızı & modüllerini bağımsız olarak geliştirmenizi sağlamaktadır.",
+ "DomainDrivenDesignInfrastructureExplanation": "Domain Driven Design pattern ve prensiplerine dayalı katmanlı uygulama geliştirmek için eksiksiz bit altyapı",
+ "Specification": "Specification",
+ "Repository": "Repository",
+ "DomainService": "Domain Service",
+ "ValueObject": "Value Object",
+ "ApplicationService": "Application Service",
+ "DataTransferObject": "Data Transfer Object",
+ "AggregateRootEntity": "Aggregate Root, Entity",
+ "AutoRESTAPIsExplanation": "ABP, application servislerinizi otomatik olarak API Controller olarak kurallı bir şekilde yapılandırabilir.",
+ "DynamicClientProxiesExplanation": "Apilerinizi, JavaScript ve C# clients tarafından kolaylıkla kullanın.",
+ "DistributedEventBusWithRabbitMQIntegrationExplanation": "Easily publish & consume distributed events using built-in Distributed Event Bus with RabbitMQ integration available.",
+ "TestInfrastructureExplanation": "The framework has been developed unit & integration testing in mind. Provides you base classes to make it easier. Startup templates come with pre-configured for testing.",
+ "AuditLoggingEntityHistoriesExplanation": "",
+ "EmailSMSAbstractionsWithTemplatingSupportExplanation": "",
+ "LocalizationExplanation": "",
+ "SettingManagementExplanation": "",
+ "ExtensionMethodsHelpersExplanation": "",
+ "AspectOrientedProgrammingExplanation": "",
+ "DependencyInjectionByConventionsExplanation": "",
+ "DataFilteringExplanation": "",
+ "PublishEvents": "Publish Events",
+ "HandleEvents": "Handle Events",
+ "AndMore": "",
+ "Code": "Code",
+ "Result": "Sonuç",
+ "SeeTheDocumentForMoreInformation": "See the {0} document for more information",
+ "IndexPageHeroSection": "open sourceWeb Application
Framework for asp.net core",
+ "UiFramework": "UI Framework",
+ "EmailAddress": "E-Posta Adresi",
+ "Mobile": "Mobil",
+ "ReactNative": "React Native"
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/tr.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/tr.json
new file mode 100644
index 0000000000..4eb4a1209b
--- /dev/null
+++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/tr.json
@@ -0,0 +1,7 @@
+{
+ "culture": "tr",
+ "texts": {
+ "DisplayName:Abp.Localization.DefaultLanguage": "Varsayılan dil",
+ "Description:Abp.Localization.DefaultLanguage": "Varsayılan uygulama dili."
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/tr.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/tr.json
new file mode 100644
index 0000000000..6c3c94cfdf
--- /dev/null
+++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/tr.json
@@ -0,0 +1,6 @@
+{
+ "culture": "tr",
+ "texts": {
+ "hello": "Merhaba"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/tr.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/tr.json
index 1f38b5c8d4..a6b6ce2a44 100644
--- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/tr.json
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/tr.json
@@ -1,6 +1,7 @@
-{
+{
"culture": "tr",
"texts": {
- "USA": "Amerika Birleşik Devletleri"
+ "USA": "Amerika Birleşik Devletleri",
+ "Brazil": "Brezilya"
}
}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/tr.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/tr.json
new file mode 100644
index 0000000000..4a1cb24c25
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/tr.json
@@ -0,0 +1,7 @@
+{
+ "culture": "tr",
+ "texts": {
+ "ThisFieldIsRequired": "Bu alan zorunludur",
+ "MaxLenghtErrorMessage": "Bu alan maksimum '{0}' karakter olabilir"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/tr.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/tr.json
index fa2d23246b..eddd61c662 100644
--- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/tr.json
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/tr.json
@@ -1,9 +1,11 @@
-{
+{
"culture": "tr",
"texts": {
"Hello {0}.": "Merhaba {0}.",
"Car": "Araba",
"CarPlural": "Araba",
- "Universe": "Evren"
+ "MaxLenghtErrorMessage": "Bu alanın uzunluğu maksimum '{0}' karakter olabilir",
+ "Universe": "Evren",
+ "FortyTwo": "Kırk İki"
}
}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/tr.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/tr.json
new file mode 100644
index 0000000000..df3fe71cd9
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/tr.json
@@ -0,0 +1,6 @@
+{
+ "culture": "tr",
+ "texts": {
+ "SeeYou": "Görüşürüz"
+ }
+}
\ No newline at end of file
diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json
index 44cebc1190..60d5f40634 100644
--- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json
+++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"UserName": "Kullanıcı adı",
@@ -11,10 +11,12 @@
"InvalidUserNameOrPassword": "Kullanıcı adı ya da şifre geçersiz!",
"LoginIsNotAllowed": "Giriş yapamazsınız! E-posta adresinizi ya da telefon numaranızı doğrulamanız gerekiyor.",
"SelfRegistrationDisabledMessage": "Bu uygulama için kullanıcıların kendi kendilerine kaydolmaları engellenmiştir. Yeni bir kullanıcı kaydetmek için lütfen uygulama yöneticisi ile iletişime geçin.",
+ "LocalLoginDisabledMessage": "Bu uygulama için local login devre dışı bırakılmıştır.",
"Login": "Giriş yap",
"Cancel": "İptal",
"Register": "Kayıt ol",
"AreYouANewUser": "Yeni bir kullanıcı mısınız?",
+ "AlreadyRegistered": "Zaten kayıtlı mı?",
"InvalidLoginRequest": "Başarısız giriş isteği",
"ThereAreNoLoginSchemesConfiguredForThisClient": "Bu client için konfigüre edilmiş giriş şeması bulunamadı.",
"LogInUsingYourProviderAccount": "{0} hesabınızla giriş yapın.",
@@ -34,6 +36,10 @@
"PasswordChanged": "Şifre değiştirildi",
"NewPasswordConfirmFailed": "Lütfen yeni şifreyi onaylayın.",
"Manage": "Manage",
- "ManageYourProfile": "Profilinizi yönetin"
+ "ManageYourProfile": "Profilinizi yönetin",
+ "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "self-registration etkin mi ?",
+ "Description:Abp.Account.IsSelfRegistrationEnabled": "Bir kullanıcının hesabı kendisi tarafından kaydedip kaydedememesidir.",
+ "DisplayName:Abp.Account.EnableLocalLogin": "Yerel bir hesapla kimlik doğrulaması",
+ "Description:Abp.Account.EnableLocalLogin": "Sunucunun, kullanıcıların yerel bir hesapla kimlik doğrulamasına izin verip vermeyeceğini belirtir."
}
}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json
index b4b6cba0be..78e18601ff 100644
--- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json
+++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"Menu:Blogs": "Bloglar",
@@ -20,7 +20,6 @@
"SeeAll": "Hepsini Gör",
"PopularTags": "Popüler Etiketler",
"WiewsWithCount": "{0} görüntüleme",
- "ShareOnTwitter": "Twitter'da paylaş",
"LastPosts": "Son Yazılar",
"LeaveComment": "Yorum Bırak",
"TagsInThisArticle": "Makalenin Etiketleri",
@@ -33,6 +32,7 @@
"AreYouSure": "Emin misiniz?",
"CommentWithCount": "{0} yorum",
"Comment": "Yorum",
+ "ShareOnTwitter": "Twitter'da paylaş",
"CoverImage": "Kapak resmi",
"CreateANewPost": "Yeni Yazı oluştur",
"CreateANewBlog": "Yeni Blog Ekle",
@@ -43,6 +43,7 @@
"Description": "Açıklama",
"Blogs": "Bloglar",
"Tags": "Etiketler",
- "ShareOn": "Paylaş"
+ "ShareOn": "Paylaş",
+ "TitleLengthWarning": "Başlığınınz SEO dostu olabilmesi için 60 karakterden az olmasını sağlayın!"
}
}
\ No newline at end of file
diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/tr.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/tr.json
index 8f49c6e952..c88e95867d 100644
--- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/tr.json
+++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/tr.json
@@ -1,6 +1,7 @@
-{
+{
"culture": "tr",
"texts": {
+ "DocsTitle": "VoloDocs",
"WelcomeVoloDocs": "VoloDocs Hoşgeldiniz!",
"NoProjectWarning": "Henüz bir proje yok!",
"CreateYourFirstProject": "İlk projenizi oluşturmak için tıklayın",
diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json
index c40893e538..319a901004 100644
--- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json
+++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"Permission:DocumentManagement": "Döküman yönetimi",
@@ -7,6 +7,7 @@
"Permission:Delete": "Sil",
"Permission:Create": "Oluştur",
"Permission:Documents": "Döküman",
+ "Menu:Documents": "Dokümanlar",
"Menu:DocumentManagement": "Dökümanlar",
"Menu:ProjectManagement": "Projeler",
"CreateANewProject": "Yeni proje oluştur",
@@ -29,8 +30,19 @@
"DisplayName:LatestVersionBranchName": "Son versiyon Branch adı",
"DisplayName:GitHubRootUrl": "GitHub kök adresi",
"DisplayName:GitHubAccessToken": "GitHub erişim token",
+ "DisplayName:GitHubUserAgent": "GitHub kullanıcı temsilcisi",
"DisplayName:All": "Çekme bütün",
"DisplayName:LanguageCode": "Dil kodu",
- "DisplayName:Version": "versiyon"
+ "DisplayName:Version": "versiyon",
+ "Documents": "Dokümanlar",
+ "RemoveFromCache": "Önbellekten kaldır",
+ "Reindex": "Yeniden İndeksle",
+ "ReindexCompleted": "Yeniden indeksleme tamamlandı",
+ "RemovedFromCache": "Önbellekten kaldırıldı",
+ "RemoveFromCacheConfirmation": "Bu maddeyi önbellekten kaldırmak istediğiniz emin misiniz?",
+ "ReIndexDocumentConfirmation": "Bu maddeyi yeniden indekslemek istediğinize emin misiniz?",
+ "DeleteDocumentFromDbConfirmation": "Bu maddeyi veritabanından silmek istediğinize emin misiniz?",
+ "DeleteFromDatabase": "Veritabanından sil",
+ "Deleted": "Silindi"
}
}
\ No newline at end of file
diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json
index 612274f95d..f41a049932 100644
--- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json
+++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json
@@ -1,4 +1,4 @@
-{
+{
"culture": "tr",
"texts": {
"Documents": "Dökümanlar",
@@ -9,17 +9,30 @@
"Edit": "Düzenle",
"LastEditTime": "Son Düzenleme",
"Delete": "Sil",
+ "ClearCache": "Önbelleği temizle",
+ "ClearCacheConfirmationMessage": "\"{0}\" Projesinin tüm önbelliğini temizlemek istediğinize emin misiniz? ",
+ "ReIndexAllProjects": "Tüm projeleri yeniden indexle",
+ "ReIndexProject": "Projeyi yeniden indeksle",
+ "ReIndexProjectConfirmationMessage": "\"{0}\" Projesini yeniden insdekslemek istediğinize emin misiniz?",
+ "SuccessfullyReIndexProject": "\"{0}\" Projesi başarıyla yeniden indekslendi",
+ "ReIndexAllProjectConfirmationMessage": "Tüm projeleri yeniden indekslemek istediğinize emin misiniz?",
+ "SuccessfullyReIndexAllProject": "Tüm projeler başarıyla yeniden indekslendi",
"InThisDocument": "Bu dökümanda",
"GoToTop": "En üste çık",
"Projects": "Proje(ler)",
"NoProjectWarning": "Hiç proje yok!",
"DocumentNotFound": "Aradığınız döküman bulunamadı!",
+ "ProjectNotFound": "Talep edilen proje bulunamadı!",
"NavigationDocumentNotFound": "Bu döküman için menü bulunamadı!",
"DocumentNotFoundInSelectedLanguage": "İstediğiniz dilde belge bulunamadı. Varsayılan dilde belge gösterilir.",
+ "FilterTopics": "Konuları Filtrele",
+ "FullSearch": "Dokümanlarda Ara",
+ "Volo.Docs.Domain:010001": "Elastic search etkin değil",
"MultipleVersionDocumentInfo": "Bu dökümanın birden çok versiyonu bulunmaktadır. Sizin için en uygun olan seçenekleri seçiniz.",
"New": "Yeni",
"Upd": "Günc",
"NewExplanation": "Son iki hafta içinde oluşturuldu.",
- "UpdatedExplanation": "Son iki hafta içinde güncellendi."
+ "UpdatedExplanation": "Son iki hafta içinde güncellendi.",
+ "Volo.Docs.Domain:010002": "ShortName {ShortName} zaten var."
}
}
\ No newline at end of file
diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/tr.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/tr.json
index febe7634a4..30f659ff45 100644
--- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/tr.json
+++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/tr.json
@@ -1,6 +1,14 @@
{
"culture": "tr",
"texts": {
-
+ "VirtualFileExplorer": "Sanal dosya gezgini",
+ "VirtualFileType": "Sanal dosya tipi",
+ "Menu:VirtualFileExplorer": "Sanal dosya gezgini ",
+ "LastUpdateTime": "Son güncelleme zamanı",
+ "VirtualFileName": "Sanal dosya adı",
+ "FileContent": "Dosyaa içeriği",
+ "Size": "Boyut",
+ "BackToRoot": "Kök'e dön",
+ "EmptyFileInfoList": "Sanal dosyalar yok"
}
-}
+}
\ No newline at end of file
diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts/tr.json b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts/tr.json
new file mode 100644
index 0000000000..eec8580dc8
--- /dev/null
+++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts/tr.json
@@ -0,0 +1,10 @@
+{
+ "culture": "tr",
+ "texts": {
+ "Permission:ProductManagement": "Ürün Yönetimi",
+ "Permission:Products": "Ürünler",
+ "Permission:Edit": "Güncelle",
+ "Permission:Delete": "Sil",
+ "Permission:Create": "Oluştur"
+ }
+}
\ No newline at end of file
diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/Localization/Resources/ProductManagement/tr.json b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/Localization/Resources/ProductManagement/tr.json
new file mode 100644
index 0000000000..0c1b3532e7
--- /dev/null
+++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/Localization/Resources/ProductManagement/tr.json
@@ -0,0 +1,16 @@
+{
+ "culture": "tr",
+ "texts": {
+ "Menu:ProductManagement": "Ürün Yönetimi",
+ "Menu:Products": "Ürünler",
+ "ProductManagement": "Ürün Yönetimi",
+ "CreateANewProduct": "Yeni Bir Ürün Oluştur",
+ "Products": "Ürünler",
+ "StockCount": "Stok Sayısı",
+ "Code": "Kod",
+ "Name": "İsim",
+ "Price": "Fiyat",
+ "ImageName": "Fotoğraf İsmi",
+ "ProductDeletionWarningMessage": "Bu ürünü silmek istediğinize emin misiniz?"
+ }
+}
\ No newline at end of file